如何从外部适配器处理列表项小部件

时间:2014-09-11 20:20:26

标签: android listview button

我有一个要求,我需要实现一个ListAdapter,它只能用于显示目的。
每个列表项行包含一个按钮。我编写了一个Adapter子类,它将BaseAdapater单独扩展为一个不在于活动状态的文件。
我的查询是我需要点击活动列表中列表项的按钮。
换句话说,我需要处理来自Adapter类外部的列表项的小部件。

我的代码如下:

MyAdapter.java

public MyAdapter扩展BaseAdapter
{
 }

MyActivity.java

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

//这里我需要捕获小部件点击列表项目
任何人都可以帮我解决这个问题吗?
提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以简单地将自定义接口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);
         }

}

答案 1 :(得分:0)

使用您的自定义扩展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的实例,您可以在其中实现所需的一切。 干杯!