2014-11-25 68 views
2

我需要從SelectContactsActivity中獲取選定的聯繫人並在ContactListActivity中顯示這些選定的聯繫人。但我沒有收到我選擇的聯繫人。沒有得到選定的聯繫人到列表視圖

我SelectContactsActivity.java

public class SelectContactsActivity extends Activity{ 

private ListView select_listView; 
private EditText search_edt; 
private List<ContactBean> list = new ArrayList<ContactBean>(); 
private ContanctAdapter objAdapter; 
//private boolean UpdateAB; 
private String groupName; 

protected void onCreate(Bundle bundle) { 
super.onCreate(bundle); 
setContentView(R.layout.activity_selectcontacts); 
select_listView = (ListView) findViewById(R.id.select_contacts_listView); 
search_edt = (EditText) findViewById(R.id.inputSearch); 
Intent intent = getIntent(); 
groupName = intent.getStringExtra("group_name"); 

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)); 

    ContactBean objContact = new ContactBean(); 
    objContact.setName(name); 
    objContact.setPhoneNo(phoneNumber); 
    list.add(objContact); 
} 
phones.close(); 
objAdapter = new ContanctAdapter(SelectContactsActivity.this, R.layout.select_contacts_list_item, list, updateAB); 
select_listView.setAdapter(objAdapter); 
objAdapter.setEditMode(true); 

if (null != list && list.size() != 0) { 
    Collections.sort(list, new Comparator<ContactBean>() { 

     @Override 
     public int compare(ContactBean lhs, ContactBean rhs) { 
      return lhs.getName().compareTo(rhs.getName()); 
     } 
    }); 

} else { 
    showToast("No Contact Found!!!"); 
} 

select_listView.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> listview, View v, 
      int position, long id) { 
     // TODO Auto-generated method stub 
     objAdapter.setChecked(position, v); 
     objAdapter.notifyDataSetChanged(); 
     invalidateOptionsMenu(); 
    } 
}); 

/** 
* Enabling Search Filter 
* */ 
// Capture Text in EditText 
search_edt.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void afterTextChanged(Editable arg0) { 
     // TODO Auto-generated method stub 
     String text = search_edt.getText().toString().toLowerCase(Locale.getDefault()); 
     objAdapter.filter(text); 
    } 

    @Override 
    public void beforeTextChanged(CharSequence arg0, int arg1, 
      int arg2, int arg3) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, 
      int arg3) { 
     // TODO Auto-generated method stub 
    } 
}); 
} 

private void showToast(String msg) { 
// TODO Auto-generated method stub 
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); 
} 

@Override 
protected void onResume() { 
super.onResume(); 
objAdapter.setEditMode(true); 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.actions_select_contacts_list, menu); 
    MenuItem item = null; 
    if (select_listView.getCount() > 0) { 
     if(objAdapter.isCheckItem()){ 
      menu.findItem(R.id.action_done).setEnabled(true).setVisible(true); 
      item = menu.add(Menu.NONE, R.id.action_done, Menu.NONE,R.string.done); 
     }else{ 
      menu.findItem(R.id.action_done).setEnabled(false).setVisible(false); 
     } 
    }else{ 
     menu.findItem(R.id.action_done).setEnabled(false).setVisible(false); 
    } 

    Log.v(this.getClass().getName(), "Check update..."+objAdapter.isCheckItem()); 
return true; 

} 

@Override 
public void onBackPressed() { 
super.onBackPressed(); 
finish(); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

// Handle action bar item clicks here. The action bar will 
// automatically handle clicks on the Home/Up button, so long 
// as you specify a parent activity in AndroidManifest.xml. 
switch (item.getItemId()) { 

    case R.id.action_done: 
     StringBuilder _itemBuilder = new StringBuilder(); 

     objAdapter.saveSelected(groupName); 
     invalidateOptionsMenu(); 

     finish(); 
     break; 

    } 
    return true; 

} 


Handler updateAB = new Handler(){ 
@Override 
public void handleMessage(Message msg) { 
    // TODO Auto-generated method stub 
    super.handleMessage(msg); 
    invalidateOptionsMenu(); 
    Log.v(SelectContactsActivity.this.getClass().getName(), "Check invalidate cal;l"); 
} 
}; 

} 

我ContanctAdapter.java

public class ContanctAdapter extends ArrayAdapter<ContactBean> { 

public Context mcontext; 
private List<ContactBean> items; 
private ContactBean objBean; 
private boolean isEdit; 
private ArrayList<ContactBean> arraylist; 
public boolean[] contactCheckArray; 
private LayoutInflater inflater; 

public ContanctAdapter(Activity act, int row, List<ContactBean> items, Handler handler) { 
super(act, row, items); 
this.mcontext = act; 
inflater = LayoutInflater.from(act); 
this.items = items; 
this.arraylist = new ArrayList<ContactBean>(); 
this.arraylist.addAll(items); 
contactCheckArray = new boolean[items.size()]; 

} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
final View view = null==convertView?inflater.inflate(R.layout.select_contacts_list_item, null):convertView; 

ViewHolder holder = null; 
if (null == view.getTag()) { 
    holder = new ViewHolder(); 
    holder.tvname = (TextView) view.findViewById(R.id.tvname); 
    holder.tvPhoneNo = (TextView) view.findViewById(R.id.tvphone); 
    holder.iv = (ImageView)view.findViewById(R.id.contacts_imageview); 
    view.setTag(holder); 
} else { 
    holder = (ViewHolder) view.getTag(); 
} 

objBean = items.get(position); 

if (holder.tvname != null && null != objBean.getName() && objBean.getName().trim().length() > 0) { 
    holder.tvname.setText(Html.fromHtml(objBean.getName())); 
} 
if (holder.tvPhoneNo != null && null != objBean.getPhoneNo() 
     && objBean.getPhoneNo().trim().length() > 0) { 
    holder.tvPhoneNo.setText(Html.fromHtml(objBean.getPhoneNo())); 
} 

if (isEdit) { 
    holder.iv.setVisibility(View.VISIBLE); 
} else { 
    holder.iv.setVisibility(View.GONE); 
} 
return view; 
} 
public void setEditMode(boolean isEdit) { 
this.isEdit = isEdit; 
} 

public boolean isCheckItem() { 
    for (boolean value : contactCheckArray) { 
     if (value) 
      return true; 
    } 
    return false; 
} 

public void setChecked(final int pos, final View row) { 
    if (!contactCheckArray[pos]) { 
     ((ViewHolder) row.getTag()).iv.setImageResource(R.drawable.setting_check); 
     contactCheckArray[pos] = true; 
     notifyDataSetChanged(); 
    } else { 
     contactCheckArray[pos] = false; 
     ((ViewHolder) row.getTag()).iv.setImageResource(R.drawable.setting_check_box_bg); 
     notifyDataSetChanged(); 
    } 
} 

public class ViewHolder { 
public ImageView iv; 
public TextView tvname, tvPhoneNo; 
} 

public void saveSelected(String groupName){ 
StringBuilder _itemBuilder = new StringBuilder(); 
ProfilesDatabaseHelper DbHelper = new ProfilesDatabaseHelper(mcontext); 
for (int i = 0; i < arraylist.size(); i++) { 
    if (contactCheckArray[i]) { 
     _itemBuilder.append("'"+ arraylist.get(i).getPhoneNo() + "'" + ","); 
     //Toast.makeText(mcontext, "Selected Contacts : "+_itemBuilder.toString(), Toast.LENGTH_LONG).show(); 
     DbHelper.executeSQL("INSERT INTO GroupsTable (GroupName, ContactName, PhoneNumber) VALUES ('"+groupName+"', '"+arraylist.get(i).getName()+"','"+ arraylist.get(i).getPhoneNo()+ "')"); 
    } 
} 
if (_itemBuilder.length() > 0) { 
    _itemBuilder.deleteCharAt(_itemBuilder.length() - 1); 
    Log.v(getClass().getName(), "Check..selected contactss :"+ _itemBuilder.toString()); 
    //Toast.makeText(getApplicationContext(), "Selected Contacts : "+_itemBuilder.toString(), Toast.LENGTH_LONG).show(); 
    // This will clear the buffer 
    _itemBuilder.delete(0, _itemBuilder.length()); 

} 
} 

public void filter(String charText) { 
// TODO Auto-generated method stub 
charText = charText.toLowerCase(Locale.getDefault()); 
items.clear(); 
if (charText.length() == 0) { 
    items.addAll(arraylist); 
}else { 
    for (ContactBean ob : arraylist) { 
     if (ob.getName().toLowerCase(Locale.getDefault()).contains(charText)) { 
      items.add(ob); 
     } 
    } 
} 

notifyDataSetChanged(); 
} 
} 

如果我在SelectContactsList活動點擊第一項自動我9日和17日和25日,33 ....也選擇了聯繫人,並返回了一個未選擇聯繫人列表活動的聯繫人。我沒有得到任何錯誤。任何人都可以幫助我解決這個問題。

回答

1

你的問題是在你的監聽器中的第一個片段中的這一行。

objAdapter.setChecked(position, v); 

POSITION與ID不同。 A ListView只呈現它需要顯示的項目數量。該位置是呈現列表中的位置。

將其更改爲id

看到這個職位,以及爲這個有着深入的例子一個更好的解釋:Create a ListView with selectable rows/change background color of ListView rows when clicked

+0

感謝您的回覆@Alex ..問題沒有被改變的位置ID解決,能否請你解釋它是如何我可以解決這個問題。 – 2014-11-25 04:44:36

+0

@srikanthk你看過我給你的鏈接嗎?這篇文章有一些非常深入的示例,說明如何拉選擇什麼 – 2014-11-25 11:12:13

+0

是的,謝謝@亞歷山大我把我的問題解決了。該鏈接對我來說非常有用。 – 2014-11-27 03:44:48

相關問題