SetOnClickListener 在 DialogFragment 中不起作用
Posted
技术标签:
【中文标题】SetOnClickListener 在 DialogFragment 中不起作用【英文标题】:SetOnClickListener doesn't work in DialogFragment 【发布时间】:2020-08-19 07:34:30 【问题描述】:当我单击 DialogFragment 内的列表视图时,我试图获取索引,但我什么也没得到...我不知道为什么...
这是OnCreatedDialog
,我有setOnClickListener
:
这是我的适配器,我正在尝试将 setOnClickListener 放在这里:
public class AdapterListviewChangeStartingKarateka extends ArrayAdapter
Context context;
int item_Layaut;
ArrayList<Karateka> data;
ApiUtils apiUtils;
public AdapterListviewChangeStartingKarateka(Context context, int item_Layaut, ArrayList<Karateka> data)
super(context, item_Layaut,data);
this.context = context;
this.item_Layaut = item_Layaut;
this.data = data;
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent)
if (convertView == null)
LayoutInflater layoutInflater = LayoutInflater.from(context);
convertView = layoutInflater.inflate(item_Layaut, parent, false);
String image = data.get(position).getPhoto_karateka();
ImageView elementImage = convertView.findViewById(R.id.change_starting_picture_karateka);
if(image!= null || !!!image.isEmpty() )
Picasso.get().load(apiUtils.BASE_URL_PICTURE + image).fit().into(elementImage);
else elementImage.setImageResource(R.drawable.default_image);
Button buttonToChange= convertView.findViewById(R.id.item_button_to_change);
ListView list = convertView.findViewById(R.id.starting_listview);
list.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l)
Log.d("indexListview", String.valueOf(i));
);
【问题讨论】:
【参考方案1】:尝试实现一个 ListView 适配器并在适配器的 getView()
方法中定义您的监听器。
您应该为每个视图元素设置监听器。
viewKarateka.setOnClickListener(new View.OnClickListener()
public void onClick(final View v)
Log.d("indexListview", String.valueOf(i));
【讨论】:
DialogFragment中有选项吗?? 老实说,如果有其他方法可以做到这一点,我不知道。据我所知,您的代码应该可以工作,但您的代码中有一些看不见的代码。例如,如何填充 ListView?据我了解,您没有使用适配器。 是的,我有一个适配器可以做到这一点,但我试图将列表视图放在适配器中,这是非常难的代码,因为我必须移动很多变量......所以我想要在 DialogFragment 中找到方法 您不应在适配器中使用 listview(或定义)。您可以找到适配器使用示例here。另外在getView()
方法中定义你的点击监听器。
我已经用适配器更新了帖子,但我也得到了一个错误,我不知道这里的listview是如何实现的......以上是关于SetOnClickListener 在 DialogFragment 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 tls.Dial 添加 10 秒超时? (没有tls.DialTimeout对应net.DialTimeout)