Java – create viewholder final in custom listview adapter Android

I have a listview with such a custom adapter

@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);
        }
    });

Now change anything in onclicklistener I-E viewholder moreLayout. setVisibility(View.GONE); I need to make viewholder final, but later I will not be able to execute viewholder = (viewholder) view getTag();

How can I solve this problem?

Solution

Assign it to the final field before setonclicklistener

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

And use viewholderfinal in onclicklistener

You can avoid creating a new viewholder every time you call getview

ViewHolder viewHolder = null;

    if (convertView == null)
    {
      viewHolder = new ViewHolder();
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>