使用自定义适配器在AlertDialog中单击侦听器

negatiffx

我正在尝试使用自定义列表(图像 + 文本)执行 AlertDialog。我正在使用自定义适配器,它可以工作,但我不明白为什么 onClick 事件不起作用。我已经尝试过创建 ListView,将我的适配器设置为它,然后将视图设置为我的 AlertDialog,但我仍然无法捕获该事件。我究竟做错了什么?

ArrayList<ItemData> list = ItemData.createFromMaterialArray(materials);
        MaterialsAdapter adapter = new MaterialsAdapter(this,
                R.layout.custom_material_item, R.id.text, list);


        AlertDialog.Builder materialTypesDialog = new AlertDialog.Builder(this);
        materialTypesDialog.setTitle(R.string.material);
        materialTypesDialog.setAdapter(adapter, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // Nothing happens, why???
                Toast.makeText(context, "WORK", Toast.LENGTH_LONG).show();
            }
        });

        materialTypesDialog.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                // Same problem
                Toast.makeText(context, "WORK", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        materialTypesDialog.show();

我的适配器,我为微调器使用了类似的适配器,它工作正常。

class MaterialsAdapter extends ArrayAdapter<ItemData> {

private int groupId;

Activity context;
ArrayList<ItemData> list;
private LayoutInflater inflater;

/**
 * @param context
 * @param _groupId
 * @param _id
 * @param list
 */
MaterialsAdapter(Activity context, int _groupId, int _id, ArrayList<ItemData>
        list) {
    super(context, _id, list);
    this.list = list;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.groupId = _groupId;
}

/**
 * @param position
 * @param convertView
 * @param parent
 * @return
 */
public View getView(int position, View convertView, ViewGroup parent) {

    View itemView = inflater.inflate(groupId, parent, false);
    ImageView imageView = (ImageView) itemView.findViewById(R.id.image);

    imageView.setImageResource(list.get(position).getImageId());
    TextView textView = (TextView) itemView.findViewById(R.id.text);
    textView.setText(list.get(position).getTextId());

    return itemView;

}

/**
 * @param position
 * @param convertView
 * @param parent
 * @return
 */
public View getDropDownView(int position, View convertView, ViewGroup
        parent) {
    return getView(position, convertView, parent);

}
}

ItemData 类

class ItemData {

private String id;
private int textId;
private int imageId;

/**
 * @param id
 * @param textId
 * @param imageId
 */
private ItemData(String id, int textId, int imageId) {
    this.id = id;
    this.textId = textId;
    this.imageId = imageId;
}

/**
 * @return
 */
int getTextId() {
    return textId;
}

/**
 * @return
 */
int getImageId() {
    return imageId;
}

/**
 * @return
 */
String getId() {
    return id;
}


/**
 * @return
 */
static ArrayList<ItemData> createFromMaterialArray(Material[] materials) {
    ArrayList<ItemData> itemDataList = new ArrayList<>();

    for (Material material : materials) {

        itemDataList.add(
                new ItemData(material.getName(),
                        material.textID,
                        material.imageID);
    }

    return itemDataList;
}}

布局 custom_material_item 看起来像带有两个项目(TextView 和 ImageView)的简单 LineralLayout。

negatiffx

问题出在我的自定义项目布局中。在我的父 LineralLayout 中添加了 Clickable="true",这就是 OnClickListner 没有触发的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Gson类型适配器与自定义脱盐器

Firebase在Android的适配器中添加侦听器

微调器OnItemSelected与自定义适配器

如何在Android中自定义适配器?

将单击侦听器添加到通用RecyclerView适配器

如何在Android中转到ListView适配器项单击侦听器以分段?

RecyclerView,适配器,单击侦听器和AsyncTask

AlertDialog无法在自定义适配器中获取上下文

如何使用自定义适配器单击列表视图中的项目

自定义视图的适配器中的NullPointerException

使用带有参数的自定义绑定适配器侦听器方法的Android自定义视图

在自定义适配器中找不到ViewByID

使用自定义适配器的ListView中的自定义行

自定义ListView适配器中的NullPointerException

Android:在“项目”上单击“侦听器”以实现列表视图基本适配器实现

为什么当我向上或向下滚动列表时,它会在我的自定义光标适配器中激活一个Switch侦听器?

为性能而设计的自定义列表阵列适配器:在何处添加侦听器?

getView()中的自定义适配器错误

自定义适配器,然后单击ListView中的项目

在自定义适配器中遍历ListView

无法使用自定义适配器单击ListView Android

如何在自定义适配器中更改按钮单击时的按钮文本

自定义绑定适配器中的通用lambda

自定义适配器中EditText的文本更改侦听器

自定义适配器getView中的IndexOutOfBounds异常

如何使用适配器处理项目中视图的单击侦听器?

无法更新自定义适配器中的项目

初始化项目选定的侦听器(自定义微调适配器)

RecyclerView 适配器中的空侦听器