【问题标题】:how to handle list item widget from outside Adapter如何处理来自适配器外部的列表项小部件
【发布时间】:2014-09-11 20:20:25
【问题描述】:

我有一个要求,我需要实现一个仅用于显示目的的 ListAdapter。
每个列表项行都包含一个按钮。
我已经编写了一个适配器子类,它将 BaseAdapter 单独扩展为一个不在活动中的文件。
我的查询是我需要从活动中捕获列表列表项的按钮单击。
换句话说,我需要处理从适配器类外部单击列表项的小部件。

我的代码如下:

MyAdapter.java

公共 MyAdapter 扩展 BaseAdapter
{
}

MyActivity.java

公共类 MyActivity 扩展 Activity {
ListView lv = (findViewById) R.id.list;
lv.setAdapter(new MyAdpater());

//这里我需要捕获widget点击列表项
谁能帮我解决这个问题?
提前致谢。

【问题讨论】:

  • 如果你需要在外面捕捉它然后尝试在外面设置监听器。应该看起来像 lv.setOnItemClickListener(new OnItemClick...

标签: android listview button


【解决方案1】:

您可以简单地将自定义接口 t 从活动传递给适配器,并在何时调用它 在 getView 方法中单击每个按钮。 像这样的:

   public MyAdapter extends BaseAdapter 
    { 
        private OnListItemClick onClickListener;

        public void setOnItemClickListener(OnListItemClick onClickListener)
        {
          this.onClickListener = onClickListener;
        }

        View getView(.....)
        {
            button  = view.findViewById(R.id.button);
            button.setOnClickListener(new OnClickListener()
              {
                 onClick(View view)
                 {
                    onClickListener.onListItemClick(position);
                 }

              }
             )

        } 

        public interface OnListItemClick{
          public void onListItemClick(int position);
         }

}

【讨论】:

    【解决方案2】:

    使用您的自定义扩展 BaseAdapter 并添加抽象方法以在单击按钮时调用,如下所示:

    public abstract CustomAdapter extends BaseAdapter { 
    
       //custom constructors and other staff
    
        public View getView(int position, ...) {
    
            //custom view initialization
    
            Button button = view.findViewById(R.id.button);
            button.setOnClickListener(new OnClickListener() {
    
                 @Override
                 public void onClick(View view) {
                    buttonClickEvent(position);
                 }
            });
        }
    
        public abstract void buttonClickEvent(int position);
    }
    

    稍后在您的代码中设置适配器之前,创建 CustomAdapter 的实例,您可以在其中实现您想要的一切。 干杯!

    【讨论】:

    • 如何从activity中获取点击列表项的位置?
    • getView(int position, View convertView, ViewGroup parent)的参数很少。您只需将位置传递给 buttonClickEvent。我会为你编辑我的答案。
    • 是的,我明白了。我尝试在外面设置监听器。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2016-05-16
    相关资源
    最近更新 更多