1

我有一个 ListView,每行一个按钮。如果我需要在单击该行时获取数据,那么在 onItemClickListener 中执行以下操作将非常容易:

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            CustomType type = (CustomType) arg0.getItemAtPosition(arg2);        //get data related to position arg2 item
        }
    });

实际上,问题是我需要在单击 ListView 行的按钮时获取数据(即:CustomType 对象),而不是行本身。由于 OnClickListener 没有像AdapterView<?>参数这样的东西(显然),我想知道我该如何处理这个?

到目前为止,我想到了获取按钮的父级,即列表视图,并以某种方式获取单击的按钮在哪一行的位置,然后调用类似: myAdapter.getItem(position); 但只是一个想法,所以请,我会感谢一些帮助这边。

4

2 回答 2

4

您可能正在为您使用自定义适配器,ListView因此最简单的getView()方法是在适配器的方法中将position参数设置为Button. 然后,您可以在 中检索标签,OnClickListener然后您就会知道单击了哪一行:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    //...
    button.setTag(Integer.valueOf(position));
    button.setOnClickListener(new OnClickListener() {

         @Override
         public void onClick(View v) {
              Integer rowPosition = (Integer)v.getTag();
         }
    });
    //...
}

您还可以从行视图中提取数据。如果可以在该行的视图中找到该行的所有数据,这将起作用:

button.setOnClickListener(new OnClickListener() {

     @Override
     public void onClick(View v) {
          LinearLayout row = (LinearLayout)v.getParent(); I assumed your row root is a LinearLayout
         // now look for the row views in the row and extract the data from each one to
         // build the entire row's data 
     }
});
于 2013-04-28T07:53:03.240 回答
0

在 Adapter 中添加一个返回CustomType对象的自定义方法

    public CustomType  getObjectDetails(int clickedPosition){
        CustomType  customType = this.list.get(clickedPosition);
        return customType ;
    }


 public void onItemClick(AdapterView<?> arg0, View arg1, int Position,long arg3) {
          CustomType type = getObjectDetails(Position);
     }
    });
于 2013-04-28T07:46:03.007 回答