在适用于listview的适配器中,按钮单击侦听器存在问题

时间:2012-01-15 04:54:48

标签: android listener adapter

public class ImageAndTextListAdapter extends ArrayAdapter<ImageAndText> {

//   new method
    private ListView listView;
    private AsyncImageLoader asyncImageLoader;
     private ImageAndText imageAndText;

//constructor
public ImageAndTextListAdapter(Activity activity, List<ImageAndText> imageAndTexts) {
    super(activity, 0, imageAndTexts);


    asyncImageLoader = new AsyncImageLoader();
}

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


    ////////////////////////////////////////////////////////////////////////////////////////////////
    // Load the image and set it on the ImageView


    //new method
    // Inflate the views from XML
    View rowView = convertView;
    ViewCache viewCache;

    if (rowView == null) {
        LayoutInflater inflater = activity.getLayoutInflater();
        rowView = inflater.inflate(R.layout.image_and_text_row, null);
        viewCache = new ViewCache(rowView);
        rowView.setTag(viewCache);
    } else {
        viewCache = (ViewCache) rowView.getTag();
    }
    imageAndText = getItem(position);

    Button btn2=(Button) findViewById(R.id.button1);

      btn2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

                     //...........
               }
      });

此适配器用于ListView,它采用image_and_text_row.xml表示listview的行数据。当我将点击监听器设置为btn2时,程序崩溃了。如果删除了监听器,那么程序运行正常。

问题是为什么适配器不能在代码中有一个按钮点击监听器?

2 个答案:

答案 0 :(得分:1)

只是在黑暗中拍摄:但您的行Button btn2=(Button) findViewById(R.id.button1);指的是适配器所在的ListActivity或ListView。因此,R.id.button1不存在...

您是否尝试过:Button btn2=((Button)rowView.findViewById(R.id.button1));这可能是您的问题(无法看到您的logcat,即)。 findViewById()找到孩子。原始语句将查找活动或视图的子项。这个新语句将找到rowView的子项。

当然,这是一个假设,因为你没有完全描述应用程序或问题,我必须根据我们所拥有的信息假设每行都有一个按钮。

希望这有帮助,

FuzzicalLogic

P.S。希望你注意到如果缺乏相关信息,你会得到像这样的伪劣答案。一个很好的指南是:1)发生了什么? 2)你期望发生什么? 3)您的调试资源表明了什么? 4)我们需要知道哪些补充研究或概念?这会导致更长的问题,但它们肯定更有效,因此它们的答案也是如此。

答案 1 :(得分:0)

您应该将onClick添加到按钮所在的xml文件中。 还要确保您的按钮位于您正在膨胀的相同布局中。