gpt4 book ai didi

android - 在android上获取动态创建的 View

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

我会尽量简短。

这是一个口袋妖怪应用程序。我有一个线性布局,我在其中动态添加 Pokemon Container 元素,如果用户按下 Eye,它会在容器下方显示一个图像。我希望眼睛成为一个“开关”:如果用户按下它,图像将出现在相应的 Pokemon Container 下方,再次单击将导致图像消失。因此,我需要为 EyePokemon Container 关联一种 ID,以便了解单击了什么来删除正确的图像。我不能使用 setId() 因为它会重复眼睛图标和容器。我也不能设置字符串 ID,因为这在 android 中是不可能的。

Application Image HERE

在 XML 中,我可以为那只Eye 设置一个 id,例如“eye_1”、“eye_2”等,并将 Pokemon Container 设置为“container_1”、“container_2” "等。所以在 onClick() 内部,我可以检索被按下的眼睛图标的编号并显示/删除图像。

我不知道如何在 android 上执行此操作。我可以在 html 上通过 ID 获取元素,因为 Id 可以是任何文本,但我到底如何实现这一点?

我们将不胜感激。

我在其中添加动态数据的 XML 是这样的:

<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
android:id="@+id/data_section"
android:layout_width="match_parent"
android:layout_height="150dp"
android:orientation="vertical">

<!-- Data will be filled dynamically from the Database-->

</LinearLayout>
</ScrollView>

我刚刚看到下面的答案,我想用我自己找到的解决方案进行编辑。我不知道这是不是正确的地方,但我走了。 appDetailsIcon 是我所说的EyelayoutPokemonContainerPokemon Container。我基本上做的是设置图像,如果没有创建,然后我使用索引删除。我知道图像之前有 3 个元素。它有点脏,但我读过标签不应该用于查找 View 在安卓上 =/.



ImageView appDetailsIcon = new ImageView(this);
appDetailsIcon.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.icon_details_small));
appDetailsIcon.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
ImageView iv = (ImageView) findViewById(pokemon.getId());
if(iv == null){//如果图像不存在我创建它
ImageView matchupDetail = new ImageView(v.getContext());

matchupDetail.setImageDrawable(ContextCompat.getDrawable(v.getContext(),R.drawable.matchup_bug));
matchupDetail.setId(宠物小 Sprite .getId());
View v1 = (View) v.getParent();
//我得到按钮的部分(Pokemon layoutStatsContainer 行)
LinearLayout v2 = (LinearLayout) v1.getParent();
//我得到 statsContainer 行的父级 (layoutPokemonContainer)
v2.addView(matchupDetail);
}else{//我从 View 中删除图像
View v1 = (View) v.getParent();//我得到按钮的部分(Pokemon layoutStatsContainer 行)
LinearLayout v2 = (LinearLayout) v1.getParent();//我得到statsContainer行的父级(layoutPokemonContainer)
v2.removeViewAt(3);
}
}
});

我真的不知道如何使用编辑器,这让我抓狂。我无法让它正常工作。

最佳答案

您可以在 View 对象上设置标签:

view.setTag("eye_1");

例如你可以在 OnClickListener 中取回它:

public void onClick(View v) {
...
String myTag = (String) v.getTag() // getTag returns "Object"
doYourLogic(myTag);
...
}

来自 java 文档 (View.java):

A tag can be used to mark a view in its hierarchy and does not have to be unique within the hierarchy.

What is the main purpose of setTag() getTag() methods of View?

关于android - 在android上获取动态创建的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44680148/

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