2013-06-27 39 views
3

我有一個ListView像這樣使得ViewHolder最終在自定義列表視圖適配器的Android

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{  
    View view = convertView; 
    ViewHolder viewHolder = new ViewHolder(); 

    if (convertView == null) 
    { 
     view = inflator.inflate(R.layout.question_adapter_layout, parent, false); 
     viewHolder.moreLayout = (LinearLayout) view.findViewById(R.id.extraOptions); 

     viewHolder.reportBtn = (Button) view.findViewById(R.id.more_report); 
     viewHolder.twitterBtn = (Button) view.findViewById(R.id.more_twitter); 
     viewHolder.googleBtn = (Button) view.findViewById(R.id.more_google); 
     viewHolder.fbBtn  = (Button) view.findViewById(R.id.more_fb); 
     viewHolder.deleteBtn = (Button) view.findViewById(R.id.more_delete); 

     view.setTag(viewHolder); 
    } 
    else 
     viewHolder = (ViewHolder) view.getTag(); 

    viewHolder.moreBtn.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      Utilities.vibrate(mContext); 
      if (viewHolder.moreLayout.getVisibility() == View.GONE) 
       viewHolder.moreLayout.setVisibility(View.VISIBLE); 
      else 
       viewHolder.moreLayout.setVisibility(View.GONE); 
     } 
    }); 

現在改變任何東西onClickListener即viewHolder.moreLayout.setVisibility(View.GONE);我需要viewHolder決賽,但以後我不會再能夠做到自定義適配器viewHolder = (ViewHolder) view.getTag();

我該如何解決這個問題?

+0

定義的函數 「ViewHolder viewHolder」 如雷貫耳。 –

回答

11

其分配給最終場setOnClickListener

final ViewHolder viewHolderFinal = viewHolder; 
viewHolder.moreBtn.setOnClickListener(new View.OnClickListener() 

前和使用viewHolderFinal內onClickListener

就可以避免創建新的ViewHolder每次getView被調用。

ViewHolder viewHolder = null; 

    if (convertView == null) 
    { 
     viewHolder = new ViewHolder(); 
0

在ViewHolder內將onClickListener和視圖moreLayout也把ViewHolder

class ViewHolder { 

    public View more_Layout; 

    public Button reportBtn; 
    public Button twitterBtn; 
    public Button googleBtn; 
    public Button fbBtn; 
    public Button deleteBtn; 


    public ViewHolder(){ 

    moreBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) 
     { 
     Utilities.vibrate(mContext); 
     if (moreLayout.getVisibility() == View.GONE) 
      moreLayout.setVisibility(View.VISIBLE); 
     else 
      moreLayout.setVisibility(View.GONE); 
     } 
    }); 

}

相關問題