android 将 OnClickListener 表单适配器移动到 ListFragment

标签 android listview onclicklistener


我有 ListFragment 和一个自定义适配器。
我列表中的每一行都包含两个 TextView 和一个 ImageButton。 我想在单击图像按钮时调用一个方法。

public class MyCustomAdapter extends SimpleAdapter {

private final Context context;
private final List<? extends Map<String,? >> data;
private final String[] from;

    public MyCustomAdapter(Context context, List<? extends Map<String, ?>> data, String[] from) {
        super(context, data, R.layout.list_item, from, new int[]{R.id.firstLine, R.id.secondLine});
        this.context=context;
        this.data=data;
        this.from=from;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.list_item, parent, false);
        TextView firstLine = (TextView) rowView.findViewById(R.id.firstLine);
        TextView secondLine = (TextView) rowView.findViewById(R.id.secondLine);
        firstLine.setText((CharSequence) data.get(position).get(from[0]));
        secondLine.setText((CharSequence) data.get(position).get(from[1]));
        ImageButton imageButton = (ImageButton) rowView.findViewById(R.id.tourItemDelete);
        final long tourId = (Long) data.get(position).get("key");
        imageButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                //do something dependend on tourId


            }
        });


        return rowView;
    }

我想在我的 ListFragment 中有这个 onClickListener

我的 ListFragment 中的 onListItemClick 方法仅在我点击两个 TextView 之一时调用,但在我点击 ImageButton 时不会调用。

  1. 是否可以将此 onClickListener 从我的适配器移动到 ListFragment? tourId 也应该从我的适配器传递到 ListFragment 中的方法。
  2. 为什么在单击 ImageButton 时未调用 ListFragment 中的 onListItemClick 方法?

最佳答案

我的一个 friend 帮助了我并向我展示了如何解决我的问题。

我在我的适配器中创建了一个接口(interface)并在我的 fragment 中实现了它。

public class MyCustomAdapter extends SimpleAdapter {

private OnImgClicked mImageClicked;
private final Context context;
private final List<? extends Map<String,? >> data;
private final String[] from;

public MyCustomAdapter(Context context, List<? extends Map<String, ?>> data, String[] from) {
    super(context, data, R.layout.list_item, from, new int[]{R.id.firstLine, R.id.secondLine});
    this.context=context;
    this.data=data;
    this.from=from;

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.list_item, parent, false);
    TextView firstLine = (TextView) rowView.findViewById(R.id.firstLine);
    TextView secondLine = (TextView) rowView.findViewById(R.id.secondLine);
    firstLine.setText((CharSequence) data.get(position).get(from[0]));
    secondLine.setText((CharSequence) data.get(position).get(from[1]));
    ImageButton imageButton = (ImageButton) rowView.findViewById(R.id.tourItemDelete);
    final long tourId = (Long) data.get(position).get("key");
    imageButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            mImageClicked.imgClicked(tourId);

        }
    });

    return rowView;
}

public interface OnImgClicked {
    public void imgClicked(long tourId);
}

public void setOnImgClickListener(OnImgClicked imgClicked) {
    this.mImageClicked = imgClicked;
}
}

在 fragment 中实现接口(interface)

public class MyFragment extends ListFragment implements MyCustomAdapter.OnImgClicked {
    //...other methods like

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    [...]//init/create variables for MyCustomAdapter Creation
    MyCutsomAdapter adapter = new MyCustomAdapter(getActivity(),....);
    adapter.setOnImgClickListener(this);

    }

    @Override
    public void imgClicked(long tourId) {
        //do something with tourId
    }

}

关于android 将 OnClickListener 表单适配器移动到 ListFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22159932/

相关文章:

java - 完全无响应的 Android 自定义适配器

android - Eclipse:转换为 Dalvik 格式失败,出现错误 1

android - 如何在 Android 浏览器中启用平滑的圆 Angular ?

c# - 根据下拉选择 c# 填充 Listview

java - Android - 微调器 + setOnClickListener

android - onclicklistener 不在 recyclerview 上工作

android - 调用 ViewModel 实例会重置 LiveData 吗?

android - 如何使用操作栏按钮动态添加到 ListView

WPF:ListView 中的进度条

android - 在 Android 中制作一个弹跳的 ListView