OnItemClick 侦听器在异步填充列表中选择多行 android
OnItemClick listener selects multiple rows in async filled list android
我有一个列表,里面全是联系人。我使用异步 class.
加载列表中的联系人
在列表 class 中,我实现了 setOnItemClickListener。在这个 setOnItemClickListener 中,我将选定的联系人放在一个数组中,这样我就可以向他们发送文本。这一切都像在做梦。
但是有一个小问题。在列表中选择一个联系人时,会选择多个联系人,如下所示:
-normal contact-
-selected contact-
-normal contact-
-normal contact-
-normal contact-
-normal contact-
-selected contact-
我使用此代码加载联系人:
@Override
protected void onPostExecute(ArrayList<list_item_person> contacts) {
// TODO Auto-generated method stub
super.onPostExecute(contacts);
pd.cancel();
PersonListAdapter adapter = new PersonListAdapter(getActivity().getApplicationContext(),
R.layout.list_item_person, contacts);
list.setAdapter(adapter);
}
这是异步 class
onclick 是这样的:
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
list_item_person o = (list_item_person) list.getItemAtPosition(position);
SearchResults selected = new SearchResults("");
int i = 0;
for( SearchResults number:contact_selected){
if(o.phoneNumber.equals(number.getPhoneNumber())){
i ++;
selected = number;
}
};
if(i == 0) {
contact_selected.add(new SearchResults(String.valueOf(o.phoneNumber)));
arg1.setBackgroundColor(Color.RED);
Log.e("e", String.valueOf(o.phoneNumber));
}else{
contact_selected.remove(selected);
arg1.setBackgroundColor(Color.parseColor("#162229"));
}
我在这里忘记了什么?
你是 itmes/views 的第 #### 的受害者,当用户滚动列表时,它会被回收。您可以在此站点和许多博客上阅读很多关于此 'feature' 的内容。
您的代码应该记住(例如在布尔数组或数组列表中)每个项目的 'selected' 状态。您也可以向 list_item_person
添加一个布尔值 selected = false 。在 onClick() 中只更改值。
然后在 getView() 中也始终根据所选状态设置颜色。
要得到这个运行首先集中精力保持选中状态。所以删除或注释掉所有复制到数组的内容等等。
我有一个列表,里面全是联系人。我使用异步 class.
加载列表中的联系人在列表 class 中,我实现了 setOnItemClickListener。在这个 setOnItemClickListener 中,我将选定的联系人放在一个数组中,这样我就可以向他们发送文本。这一切都像在做梦。
但是有一个小问题。在列表中选择一个联系人时,会选择多个联系人,如下所示:
-normal contact-
-selected contact-
-normal contact-
-normal contact-
-normal contact-
-normal contact-
-selected contact-
我使用此代码加载联系人:
@Override
protected void onPostExecute(ArrayList<list_item_person> contacts) {
// TODO Auto-generated method stub
super.onPostExecute(contacts);
pd.cancel();
PersonListAdapter adapter = new PersonListAdapter(getActivity().getApplicationContext(),
R.layout.list_item_person, contacts);
list.setAdapter(adapter);
}
这是异步 class
onclick 是这样的:
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
list_item_person o = (list_item_person) list.getItemAtPosition(position);
SearchResults selected = new SearchResults("");
int i = 0;
for( SearchResults number:contact_selected){
if(o.phoneNumber.equals(number.getPhoneNumber())){
i ++;
selected = number;
}
};
if(i == 0) {
contact_selected.add(new SearchResults(String.valueOf(o.phoneNumber)));
arg1.setBackgroundColor(Color.RED);
Log.e("e", String.valueOf(o.phoneNumber));
}else{
contact_selected.remove(selected);
arg1.setBackgroundColor(Color.parseColor("#162229"));
}
我在这里忘记了什么?
你是 itmes/views 的第 #### 的受害者,当用户滚动列表时,它会被回收。您可以在此站点和许多博客上阅读很多关于此 'feature' 的内容。
您的代码应该记住(例如在布尔数组或数组列表中)每个项目的 'selected' 状态。您也可以向 list_item_person
添加一个布尔值 selected = false 。在 onClick() 中只更改值。
然后在 getView() 中也始终根据所选状态设置颜色。
要得到这个运行首先集中精力保持选中状态。所以删除或注释掉所有复制到数组的内容等等。