且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在自定义的ListView行可点击元素

更新时间:2021-11-04 21:43:55

您getView()是一个有点奇怪。字段的TextView 您持有人永远不会初始化?

Your getView() is a bit strange. The field textview of your holder is never initialized ?

持有人的效用是限制使用的方法 findViewById

The usefulness of the holder is to limit the use of the method findViewById.

下面是我会用骨架:

static class ViewHolder {
  public TextView textview;
}

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

   // reuse views
  if (rowView == null) {
       LayoutInflater inflater = context.getLayoutInflater();
       rowView = inflater.inflate(R.layout.listitem, null);
       // configure view holder
       ViewHolder viewHolder = new ViewHolder();
       viewHolder.textview= (TextView) rowView.findViewById(R.id.textview);
       rowView.setTag(viewHolder);
  }
  else {

      ViewHolder holder = (ViewHolder) rowView.getTag();
  }

   // fill data
   holder.textview.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final int position = listView.getPositionForView(v);
            //position is always -1 after configuration change
            Log.d(TAG, "Like button pushed at position: " + position);

        }
    });

    return rowView;
 }
} 

希望它解决您的问题!

Hopefully it solve your problem !

有一个愉快的一天!