2015-04-02 67 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函數內設置視圖顏色。 這將解決您的問題。