0

我有一个列表中充满了联系人。我使用异步类加载列表中的联系人。OnItemClick监听器在异步填充列表中选择多行android

在列表类中,我实现了一个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); 

    } 

这是异步类

和的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")); 
      } 

我在这里忘了什么?

+0

你甚至没有告诉你认为是一个选定的项目。用户如何看到一个项目被选中? – greenapps

+0

'在列表中选择一个联系人时,会选择多个联系人,如下所示:'。不要这样想。仅在用户滚动列表之后。 – greenapps

+0

@greenapps一个选定的项目是一个项目,其中背景颜色是红色的,并且该号码的值被放置在contact_selected中 – Twizzler

回答

2

当用户滚动列表时,您将成为itmes/views的受害者nr ####。你可以在这个网站和许多博客上阅读很多关于这个'功能'的内容。

你的代码应该记住(例如在一个布尔数组或ArrayList中)每个项目的'selected'状态。你也可以在你的list_item_person上添加一个boolean selected = false。在onClick()中只更改值。

然后在getView()中也总是按照选中状态设置颜色。

要让这个运行首先集中精力保持选定的状态。所以删除或注释掉所有你拷贝到数组等等。

+0

这是正确的,非常有趣:D –

+0

以及谢谢你!去实现这个! – Twizzler