2014-01-21 34 views
0

我有一個自定義適配器,它根據特定列表項是否「有效」來更改視圖的alpha值。我還需要在用戶嘗試點擊無效項目時顯示敬酒。不幸的是,由於查看回收,我目前不知道如何爲每個視圖設置不同的OnClickListener。最終,OnClickListener將應用於列表中的每個項目,是否有效。如何在自定義適配器的getView()中設置視圖的OnClickListener而不被回收

解決這個問題的「hacky」方法是在super.getView()中傳入參數爲null的參數。如果可能的話,我寧願避免這樣的事情。

我將不勝感激任何建議,謝謝!

public class TestAdapter extends ArrayAdapter<TestModel> { 

    class ViewHolder { 
     CheckedTextView ctv; 

     public ViewHolder(View v) { 
      ctv = (CheckedTextView)v.findViewById(android.R.id.text1); 
     } 
    } 

    public TestAdapter(Context context, List<TestModel> testModelList) { 
     super(context, R.layout.test_list_item, testModelList); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = super.getView(position, convertView, parent); 

     ViewHolder holder = (ViewHolder)v.getTag(); 
     if (holder == null) { 
      holder = new ViewHolder(v); 
      v.setTag(holder); 
     } 

     // Decrease alpha to indicate that the item is invalid. 
     holder.ctv.setAlpha(isEnabled(position) ? 1.0f : 0.2f); 

     if (!isEnabled(position)) { 
      holder.ctv.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // Show a toast which indicates you tried to select an invalid option. 

        // However, due to view recycling this will eventually apply to 
        // all views in the list. 
       } 
      }); 
     } 

     return v; 
    } 

    @Override 
    public boolean isEnabled(int position) { 
     return getItem(position).isValid(); 
    } 
} 

回答

0

有一個的DevBytes視頻專門對這個問題

DevBytes: ListView Animations

這是關於有一個持續的動畫繼續回收的觀點,但同樣的概念也適用於在點擊聽衆

相關問題