android - 在自定义 ListView 中只有第一行的 View (按钮)是可点击的,android

标签 android android-listview

这是我的适配器类:-

public class CustomAdapter extends BaseAdapter {

        Context c;

        CustomAdapter(Context c)
        {
            this.c=c;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return 3;
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return arg0;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            final int pos=position;
            LayoutInflater inflater=LayoutInflater.from(c);
            View v=inflater.inflate(R.layout.layout_list_item, parent, false);
            ImageButton image_button=v.findViewById(R.id.imagebutton);
            image_button.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Toast.makeText(c, "Image Button clicked:" + pos, Toast.LENGTH_SHORT).show();
                }
            });

            return v;
        }

    }

如何使所有图像按钮都可点击?我尝试搜索答案并按照此处给出的答案:how to make an imageview clickable in an listview我试过了,但只有我的第一行按钮是可点击的。请帮忙。

最佳答案

在您的自定义适配器构造函数中

    LayoutInflater mInflater;  
    CustomAdapter(Context c)
    {
        mInflater = LayoutInflater.from(c); 
        // initialize inflater in the constructor.
        // need not initialize everytime getView is called.
    }

使用 View 持有者

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

      static class ViewHolder
       {
           ImageButton ib;
       }
      @Override
      public View getView(int position, View item, ViewGroup parent) { 
       ViewHolder holder; 
       if(item == null){
       item = mInflater.inflate(R.layout.elementos_lista_temas, null);
       holder = new ViewHolder(); 
       holder.ib = (ImageButton) item.findViewById(R.id.imagebutton);
       item.setTag(holder);
       }
       else{
        holder = (ViewHolder)item.getTag();
       }
       return item;
       }

然后在你的 Activity 课上

 ListView lv = (ListView) findViewById(R.id.listview);
 CustomAdapter cus = new CustomAdapter(this);
 lv.setAdapter(cus); 
 lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> listView, View itemView, int itemPosition, long itemId)
    {           
         Toast.makeText(ActivityName.this, "Image Button clicked:" + itemPosition, Toast.LENGTH_SHORT).show();
    }
    });

关于android - 在自定义 ListView 中只有第一行的 View (按钮)是可点击的,android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17334577/

相关文章:

android - 单击 ListView 中的项目时显示进度条(圆圈)

android - 如何在Android中获取Listview项选择的计数

android - 带有 ListView 和自定义 Header 的 NavigationDrawer fragment

android - 如何在 Android 上实现 Material Design 展开/折叠列表?

android - 如何在 Flutter 应用中播放 .mp3 文件?

每次运行/构建后 Android Studio 都需要清理

android - 在 RecyclerView 上更改 CardBackgroundColor

ListView中的Android数据

android - 有没有更快的方法来转储 UI 层次结构?

java - LogCat条目含义