2015-04-02 66 views
1

我使用的是listview。我写了自定义适配器。当listview项目选择时,我改变了背景颜色。但是在滚动时我不保持选定的位置。请帮助我ListView选择的项目在滚动时不成立

谢谢。到位的onclick听众

final int selectedposition=0; 
            mListView.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(
     AdapterView<?> parent, View view,int position, long id) 

      {        
      selectedposition=position; 
      } 

       @Override 
       public void onNothingSelected(
       AdapterView<?> parent) { 
              // TODO Auto-generated method 

         } 
        }); 
+0

'convertView'是关键(事实上该视图可以重用)...这是**不**如何“选择”实现应该看起来像...有大量的教程在线如何它应该**看起来......哇tch [this](https://www.youtube.com/watch?v=wDBM6wVEO70) – Selvin 2015-04-02 13:07:59

+0

与我面对的同一问题类似... [Here](http://stackoverflow.com/questions/28486148/how-解决 - 滚动问题 - 在GridView的Android)是解决方案。 – 2015-04-02 13:21:54

回答

0

试试这个:而且我知道,如果它的工作原理:)

你可以保持跟踪当前所选元素的位置:

OnItemClickListener listViewOnItemClick = new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) { 
     mSelectedItem = position; 
     mAdapter.notifyDataSetChanged(); 
    } 
}; 

,并覆盖适配器的getView方法:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final View view = View.inflate(context, R.layout.item_list, null); 

    if (position == mSelectedItem) { 
     // set your color 
    } 

    return view; 
} 
+0

谢谢你的一切 – 2015-04-02 13:24:29

0

使用这样你得叫notifyDataSetChanged();在你,你正在处理list.setOnItemClickListener主类。添加这样的:

adapter.notifyDataSetChanged(); 

这是因为视图被回收每次它超出对焦和新的视图中创建这样序保护,你必须调用此方法的值。

+0

我知道这个方法被微调器使用。这是真的吗? – 2015-04-02 13:28:09

0

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      view.setBackgroundColor(color); 
     } 
    }); 

class OrderSummaryAdapter extends AppBaseAdapter{ 
    private ViewHolder holder; 

    public OrderSummaryAdapter(Context context, List<OrderItem> item) { 
     super(context, item); 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     if(convertView == null){ 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.example_layout, parent, false); 
      holder.text = (TextView) convertView.findViewById(R.id.eat_name); 
      convertView.setTag(holder); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 

     } 

     holder.text.setText("text"); 

     return convertView; 
    } 

    class ViewHolder{ 
     TextView text; 
    } 
} 
+0

谢谢你的一切 – 2015-04-02 13:25:06

-1

要设置所选行的背景颜色,您可以使用模型类OrderItem。为此,只需要在模型类中使用bool变量,并且每当单击列表项时,只需更改bool变量的值并调用notifydatachange函数并在适配器的getView函数内设置视图颜色。 这将解决您的问题。