【问题标题】:Passing a parameter to onclick listener on a button in a listview row将参数传递给列表视图行中按钮上的 onclick 侦听器
【发布时间】:2011-03-29 03:33:54
【问题描述】:

我刚刚启动了 android,但遇到了一些问题。
我创建了一个从数据库填充的ListView
每行都有一个按钮,用于从列表和数据库中删除项目。

我能够将事件侦听器连接到按钮,但我无法确定要删除的匹配数据库记录。

我的班级如下所示

public class FeedArrayAdapter extends ArrayAdapter<Feed> implements OnClickListener
{
    private ARssEReaderDBAdapter dba;
    private String TAG = "FeedArrayAdapter";

    public FeedArrayAdapter(Context context, int textViewResourceId, List<Feed> items)          {
    super(context, textViewResourceId, items);
    Log.w(TAG, "List");


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Log.w(TAG, "getView");
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.feedlistrow, null);
    }
    Feed feed = getItem(position);
    if (feed != null) {
        TextView title = (TextView)v.findViewById(R.id.TextView01);
        if (title != null) {
            title.setText(feed.getTitle());
        }
        Button btnDelete = (Button)v.findViewById(R.id.btnDelete);
        btnDelete.setOnClickListener(this); //btnDeleteFeedListener
    }
    return v;
}

public void onClick(View v) {
    Log.w(TAG, "something got clicked: ");
}

那么如何将数据库记录 ID 传递给处理程序,以便我可以使用数据库适配器将其删除?

【问题讨论】:

    标签: android listview button


    【解决方案1】:

    创建一个实现 OnClickListener 的内部类,然后在构造函数中传递位置变量。

     private Class MyClickListener implements OnClickListener {
    
        private int position;
    
        public MyClickListener(int position) {
           this.position = position;
        }
    
        public void onClick(View v) {
           System.out.println("position " + getPosition() + " clicked.");
        }
    
        public int getPosition() {
          return position;
        }
    
     }
    

    【讨论】:

    • 感谢您的回答,标签选项似乎是最容易实现的,并且可以满足我的所有要求:) 再次感谢
    • 我喜欢这个答案,因为我的 setTag() 已被用于其他用途。
    • 这很好,因为我需要将多个值传递给点击监听器!谢谢
    • setTag(int key, Object tag) 可用于传递多个值。
    【解决方案2】:

    您应该将记录的ID存储在Tag中,在您的视图上调用setTag(),并在onclick调用getTag()读入

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 2014-02-26
      • 2017-05-06
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多