2016-04-25 21 views
-1

我正在嘗試在CreateGroup.java中創建一組手機通訊錄。因此,爲此,我使用Intent轉到名爲ContactsView.java的新活動。我有一個所有聯繫人列表。當我點擊該列表中的聯繫人時,它將獲取該聯繫人項目的名稱並將其返回到名爲CreateGroup.java的上一個活動。但是,當我嘗試添加更多聯繫人時,它將替換listview中的以前添加的項目。我無法在列表中添加多個聯繫人。intent方法(onActivityResult)wipeout先前的listview存儲的數據

請別人幫我!

CreateGroup.java 


    public class CreateGroup extends ActionBarActivity { 
    TextView textView; 
    ListView show; 
    ArrayList<String> addArray=new ArrayList<String >(); 

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.create_group); 

ImageButton next = (ImageButton)findViewById(R.id.imgButtonAddContacts); 
      textView=(TextView)findViewById(R.id.textViewtst); 
      show= (ListView) findViewById(R.id.listView2); 
      next.setOnClickListener(new View.OnClickListener() { 

public void onClick(View view) { 
     Intent myIntent = new Intent(view.getContext(), ContactsView.class); 
        startActivityForResult(myIntent, 0); 
       } 

      }); 
     } 


@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 

     switch(requestCode) { 
       case (0) : { 
        if (resultCode == Activity.RESULT_OK) { 
         String newText = data.getStringExtra("CName"); 
         addArray.add(newText); 
         ArrayAdapter<String>adapter=new ArrayAdapter<String> (CreateGroup.this,android.R.layout.simple_list_item_1,addArray); 
         show.setAdapter(adapter); 
        } 
        break; 
       } 
      } 
     } 
    } 

這裏是ContactsView.java

public class ContactsView extends ActionBarActivity { 
     String namecsv=""; 
     String phonecsv=""; 
     String namearray[]; 
     String phonearray[]; 
     ListView lv1; 


     ArrayList<String> list_items= new ArrayList<String>(); 

     //declare a variable for counting of selected items. 
     int count=0; 

     /** Called when the activity is first created. */ 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.contacts_view); 


      lv1=(ListView)findViewById(R.id.listView); 
      list_items.add("one"); 
     Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 
      while (phones.moveToNext()){ 
String name= phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 

       String phonenumber= phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

       if(name!=null){ 
        namecsv+=name + ","; 
        phonecsv+=phonenumber + ","; 
       } 
      } 
      phones.close(); 
      namearray= namecsv.split(","); 
      phonearray=phonecsv.split(","); 


      final ArrayAdapter <String> adapter = new ArrayAdapter <String> (this,android.R.layout.simple_list_item_1,android.R.id.text1,namearray); 
      lv1.setAdapter(adapter); 


      lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        String msgname = namearray[position]; 
        String msgnum = phonearray[position]; 
        Toast.makeText(getApplicationContext(), msgname + " " + msgnum, Toast.LENGTH_SHORT).show(); 

        Intent resultIntent = new Intent(); 
        resultIntent.putExtra("CName", msgname); 
        setResult(Activity.RESULT_OK, resultIntent); 
        finish(); 
       } 
      }); 

     } 
    } 

我已經根據所提供的答案更新了我的代碼。但仍面臨同樣的問題。它只顯示在列表視圖中的最後一個添加項。之前的項目刪除。

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch(requestCode) { 
      case (0) : { 
       if (resultCode == Activity.RESULT_OK) { 
        String newText = data.getStringExtra("CName"); 
        textView.setText(newText); 
        addArray.add(newText); 
        adapter.notifyDataSetChanged(); 
        show.setAdapter(adapter); 
       } 
       break; 
      } 
      default: 
       super.onActivityResult(requestCode, resultCode, data); 
     } 
    } 
+0

歡迎來到計算器。請你可以刪除註釋行,並改進代碼格式,以獲得更清晰的代碼和更好的問題 – Robert

+0

@Robert我已經重新格式化了我的代碼。請檢查它 –

回答

0

你不應該叫super.onActivityResult(requestCode, resultCode, data);的第一件事,有,但只有當你面對requestCode不是由你的代碼來處理。換句話說,這應該被添加到switch區塊,在default部分。其他的一點是,你不應該每次都設置新的適配器。所以這樣的:

addArray.add(newText); 
ArrayAdapter<String>adapter=new ArrayAdapter<String> (CreateGroup.this,android.R.layout.simple_list_item_1,addArray); 
show.setAdapter(adapter); 

應改爲:

addArray.add(newText); 
adapter.notifyDatasetChanged(); 

它只是將數據添加到您當前的陣列,然後通知有關在更改適配器(你需要onCreate()創建額外的課程)數據集。

+0

先生,我已更新我的代碼。但問題沒有解決......只顯示一個最近添加的聯繫人姓名。請幫忙! –

相關問題