[英]making ViewHolder final in Custom Listview Adapter android
我有一个listView与这样的自定义适配器
@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);
}
});
现在更改viewHolder.moreLayout.setVisibility(View.GONE);
任何内容,即viewHolder.moreLayout.setVisibility(View.GONE);
我需要使viewHolder最终,但后来我将无法执行viewHolder = (ViewHolder) view.getTag();
我该如何解决这个问题?
将其分配给setOnClickListener之前的最终字段
final ViewHolder viewHolderFinal = viewHolder;
viewHolder.moreBtn.setOnClickListener(new View.OnClickListener()
并在viewHolderFinal
使用viewHolderFinal
每次调用getView时都可以避免创建新的ViewHolder。
ViewHolder viewHolder = null;
if (convertView == null)
{
viewHolder = new ViewHolder();
在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);
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.