2015-11-17 89 views
1

我在活動A中有一個listView,如下所示。所有值和名稱實際上是從活動Ç返回到B那麼只有A.不要更改列表中的名稱

enter image description here

當單擊第一個列表,它應該在editText B.顯示文本Project和價值3但它顯示Medical這實際上是從最後的名單中得到的。

enter image description here

後我從3值更改爲43,並返回到A,名稱改變。我該怎麼做才能讓名字保持不變?

enter image description here

活動A

 ArrayAdapter<String> adapter; 
     ArrayList<String> m_listItems = new ArrayList<String>(); 
     int mClickedPosition; 
     adapter=new ArrayAdapter<String (getActivity(),R.layout.claims,R.id.textView1,m_listItems); 
    listV = (ListView) claims.findViewById(R.id.listView1); 

       listV.setOnItemClickListener(new AdapterView.OnItemClickListener() { // if list clicked 
      public void onItemClick(AdapterView<?> listView, View view, 
            int position, long id) { 
       mClickedPosition = position; 


       if (name.equals("Project")) { 
        String temp[] = m_listItems.get(position).split("\\s\\s+"); 
        result = temp[temp.length - 1].trim(); 
        result = result.replace("RM",""); 
        Intent intent = new Intent(Claims1.this.getActivity(), Project1.class); 
        intent.putExtra("bitmap", true); 
        intent.putExtra("name", name); 
        intent.putExtra("result", result); 
        startActivityForResult(intent, 0); 
        Log.e("RESULT", "Result= " + result); 
       } 
       else if(name.equals("Medical")) 
       { 
        String temp[] = m_listItems.get(position).split("\\s\\s+"); 
        result = temp[temp.length - 1].trim(); 
        result = result.replace("RM",""); 
        Intent intent = new Intent(Claims1.this.getActivity(), Medical.class); 
        intent.putExtra("bitmap", true); 
        intent.putExtra("name", name); 
        intent.putExtra("result", result); 
        startActivityForResult(intent, 1); 
       } 
      } 
     }); 
     return claims; 
     } 


    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
      case 0: // for Project 
       result = data.getStringExtra("text"); //get from B 
       name = data.getStringExtra("a"); 
       description = data.getStringExtra("c"); 
       as = Long.parseLong(result); 
       Log.d("FIRST", "result:" + result); 
       Text = " " + name + "         " + "RM" + result + ""; 
       if (mClickedPosition == -1) { // if is icon button clicked 
        m_listItems.add(Text); 

       } else { 
        m_listItems.set(mClickedPosition, Text); 

       } 
       adapter.notifyDataSetChanged(); 
       listV.setAdapter(adapter); 
       break; 

      case 1: // for Medical 
       result = data.getStringExtra("text"); 
       name = data.getStringExtra("a"); 
       description = data.getStringExtra("c"); 
       as = Long.parseLong(result); 
       Log.d("FIRST", "result:" + result); 
       Text = " " + name + "         " + "RM" + result + ""; 
       // m_listItems.clear(); 
       if (mClickedPosition==-1) 
       { 
        m_listItems.add(Text); 

       } 
       else 
       { 
        m_listItems.set(mClickedPosition, Text); 

       } 
       adapter.notifyDataSetChanged(); 
       listV.setAdapter(adapter); 
       break; 

活動B(PROJECT1)

if(getIntent().getExtras()!=null) { //if has value pass from A 
      final String Amount = getIntent().getExtras().getString("result"); 
      final String description1 = getIntent().getExtras().getString("description"); 
      txt1.setText(description1); 
      txt.setText(Amount); 
     } 

       b.setOnClickListener(new View.OnClickListener() { // return to A 
        public void onClick(View arg0) { 
         Intent returnIntent = new Intent(); 
         a = "Project"; 
         text = txt.getText().toString(); // amount 
         returnIntent.putExtra("text", text); 
         returnIntent.putExtra("a", a); 
         returnIntent.putExtra("c", c); // receive from Activity C 
         setResult(Activity.RESULT_OK, returnIntent); 
         finish(); 
        } 
       }); 
         viewImage.setImageBitmap(Global.img); // receive from C 
        } 

注意,在該result代表值3,5-而name表示項目醫療

+0

嘗試調試,並檢查您是否在開始意圖之前得到正確的名稱 – Mohit

+0

@Mohit我認爲這與我以前的帖子是一樣的,但這次是名稱沒有結果 – Tony

+0

@Tony,你可以通過自定義listview來簡化你的代碼,它會更容易,更具可讀性,你會有 –

回答

0

以下是您要在listview

MyItem.java 

public class MyItem { 

    private String name; 

    private String something; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getSomething() { 
     return something; 
    } 

    public void setSomething(String something) { 
     this.something = something; 
    } 
} 

佈局單項怎麼會出現在ListView它來填充您的自定義對象的文件名下方my_single_item.xml是佈局的內容

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <TextView 
     android:id="@+id/text_first" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="0.60" 
     android:gravity="center" 
     android:padding="4dp" 
     android:textColor="#000" 
     android:textSize="18sp" /> 

    <TextView 
     android:id="@+id/text_second" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="0.60" 
     android:gravity="center" 
     android:padding="4dp" 
     android:textColor="#000" 
     android:textSize="18sp" /> 

</LinearLayout> 

這是將填充的MyItems底層列表中選擇適配器側listview通過使個別項目

MyAdapter.java 

import java.util.ArrayList; 

/** 
* Created by Pankaj Nimgade on 18-11-2015. 
*/ 
public class MyAdapter extends ArrayAdapter { 

    private LayoutInflater layoutInflater; 
    private ArrayList<MyItem> myItems; 

    public MyAdapter(Context context, int resource, ArrayList<MyItem> myItems) { 
     super(context, resource, myItems); 
     layoutInflater = LayoutInflater.from(context); 
     this.myItems = myItems; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = layoutInflater.inflate(R.layout.my_single_item, parent, false); 
     TextView name = (TextView) view.findViewById(R.id.text_first); 
     TextView something = (TextView) view.findViewById(R.id.text_second); 
     MyItem myItem = myItems.get(position); 
     name.setText("" + myItem.getName()); 
     something.setText("" + myItem.getSomething()); 
     return view; 
    } 
} 

寫這段代碼在你的活動

listView = (ListView) findViewById(R.id.myListView); 
ArrayList<MyItem> myItems = new ArrayList<>(); 

for (int i = 0; i < 5; i++) { 
    MyItem myItem = new MyItem(); 
    myItem.setName("Name_" + i); 
    myItem.setSomething("RM_" + i); 
    myItems.add(myItem); 
} 

MyAdapter myAdapter = new MyAdapter(this, android.R.layout.simple_list_item_1, myItems); 
listView.setAdapter(myAdapter); 
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     MyItem myItem = (MyItem)listView.getItemAtPosition(position); 
     Toast.makeText(getApplicationContext(), ""+myItem.getName(), Toast.LENGTH_SHORT).show(); 
    } 
}); 

確保你做這個活動的佈局添加ListView

<ListView 
     android:id="@+id/myListView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"></ListView> 

你會看到土司會匹配你現在點擊的項目現在使用這個對象,並將其傳遞給你想要的任何活動,它會有你點擊的值

+0

如果我想動態添加列表,那麼如何? – Tony

+0

@Tony,你肯定可以添加更多的項目到列表中,並通過調用NotifiyDataSetChanged來更新適配器,並且該適配器所連接的列表視圖將被更新 –

+0

我需要將值從B傳遞給'onActivityResult'第一個像我已經發布? – Tony