【问题标题】:How to make imageView clickable from OnItemClickListener?如何从 OnItemClickListener 使 imageView 可点击?
【发布时间】:2017-04-02 01:29:20
【问题描述】:
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(final AdapterView<?> parent, View view, final int position, long id) 
        {

         // My code is here. I want make my image clickable. I don't want make it clickable in my CustomAdapter getView() method because it doesn't allows me open DialogFragment from there.
         // I already setted in xml of image clickable="true" and focusable = "false"
         //I'll admit for any help and thanks in advance

        }
}

【问题讨论】:

  • 请编辑您的问题

标签: java android listview clickable-image


【解决方案1】:

从适配器显示对话框应该不是问题。如果您的适配器需要一些它没有的东西,那么您可以为您的适配器添加一个字段,其中包含private final OnImageClickListener 之类的侦听器并创建一个接口:

public interface OnImageClickListener {
    void onImageClicked(View view, int position, int id);
}

当你从你的活动或片段创建适配器时,你可以在你的活动/片段或匿名类中实现这个接口,在那里你可以访问片段管理器并可以做任何你想做的事情。

【讨论】:

  • 谢谢马尔科姆,我也会采纳你的建议,这可能是解决我的问题的第二种好方法
【解决方案2】:

首先,您必须在 Adapter 类中为 Imageview 添加 OnClickListener,例如

viewHolder.button1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
    ((ListView) parent).performItemClick(v, position, 0); // Let the event be handled in onItemClick()
}

});

那么以后就可以在onItemClick中访问ImageView了

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    long viewId = view.getId();


if (viewId == R.id.button1) {
        Toast.makeText(this, "Button 1 clicked", Toast.LENGTH_SHORT).show();
    } else if (viewId == R.id.button2) {
        Toast.makeText(this, "Button 2 clicked", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this, "ListView clicked" + id, Toast.LENGTH_SHORT).show();
    }
}

享受吧!...

【讨论】:

  • 我点击了赞成投票按钮,但它没有改变投票数,不明白为什么。
  • Mehul 你能解释一下为什么将以下三个参数传递给 ((ListView) parent).performItemClick(v, position, 0);如果我明白明确的父级是 listView 的适配器,在我的案例图像中,V 是单击视图,位置是图像到原始图像的位置,为什么为零?
【解决方案3】:

如果您从适配器获取图像 Onclick,则无法从 listview 事件中获取 setOnItemClickListener。我建议您可以使用 Onclick 而不是 setOnItemClickListener 从适配器获取 Onclick。

【讨论】:

  • 是的,但如果我将 onClick 从我的适配器带入 getView() 方法,我将无法获得片段管理器以打开 DialogFragment
  • 在 onclick() 方法上放 toast 代码,检查天气是否有效,如果有效则问题是对话框片段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多