gpt4 book ai didi

android - Horizo​​ntalScrollView OnClick 方法抛出错误

转载 作者:行者123 更新时间:2023-11-29 19:26:26 25 4
gpt4 key购买 nike

在我的 XML 文件中,我的 fragment 布局包含 Horizo​​ntalScrollView,如下所示:

<HorizontalScrollView
android:id="@+id/srollview_seasons_gallery
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left">
</HorizontalScrollView>

在名为 season_list_item 的单独 XML 文件中,我制作了一个模式,说明单个项目应该是什么样子:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/season_image"
android:layout_marginLeft="7dp"
android:layout_marginRight="7dp"
android:onClick="seasonItemClicked"/>

</RelativeLayout>

我使用我的 java 代码动态添加项目,如下所示:

for (int i=0; i<seasonsSize; i++) {
View vi = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.season_list_item, null);
ImageView seasonImage = (ImageView) vi.findViewById(R.id.season_image);
//seasonImage.setId(i);
String imgUrl = response.body().getEmbedded().getSeasons().get(i).getImage().getMedium();
Picasso.with(getContext()).load(imgUrl).into(seasonImage);
seasonsLinearLayout.addView(vi);
}
seasonsScrollView.addView(seasonsLinearLayout);

当我执行我的 onClick 方法时:

public void seasonItemClicked(View view) {
}

我收到错误

java.lang.IllegalStateException: Could not find method seasonItemClicked(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatImageView with id 'season_image'

取消注释这一行 //seasonImage.setId(i); 给我错误

android.content.res.Resources$NotFoundException: Unable to find resource ID #0x0`

图片已正确添加到布局中,就像我希望的那样。但是我无法使它们可点击。我还发现 seasonImage.setId(i) 对我来说很重要,因为我需要点击图片的编号以进行进一步操作。

您能帮我解决这个问题吗?

最佳答案

问题是 android:onClick 调用了您的方法 seasonItemClicked()。由于您拥有此属性的多个 View ,它们都将调用相同的方法,但具有相同的 ID android:id="@+id/season_image"
setId 方法可能会很烦人,因为您必须设置一个唯一 id。有 some method to generate it ,所以,对于每张图片,你必须生成一个唯一的ID,如果你动态设置它,不要通过xml设置。

但是,假设您的图像数量可以变化,我更愿意在 for 循环中以编程方式添加点击监听器。这样,它们将与单击的 ImageView 相关。如下:

for (int i=0; i<seasonsSize; i++) {
...
ImageView seasonImage = (ImageView) vi.findViewById(R.id.season_image);
seasonImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// perform your actions, be aware that 'view' here, is the image clicked
}
}
...
seasonsLinearLayout.addView(vi);
}

只需删除 android:onclick 属性:

<ImageView
...
android:id="@+id/season_image"
android:layout_marginLeft="7dp"
android:layout_marginRight="7dp"/>

关于android - Horizo​​ntalScrollView OnClick 方法抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41309248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com