我会尽量做空。
这是一个口袋妖怪应用程序。 我有一个线性布局,我在其中动态添加口袋妖怪容器元素,如果用户按眼睛,它将在容器下方显示一个图像。我希望眼睛是一个“切换”:如果用户按下它,图像将出现在相应的神奇宝贝容器下方,再次单击将导致图像消失。所以我需要为 Eye 和 Pokemon容器关联一种ID,以便知道点击了什么以删除正确的图像。我不能使用setId()因为它将重复眼睛图标和容器。我也不能设置一个字符串ID,因为在android ..
中是不可能的在XML中,我可以为 Eye 设置ID,例如“eye_1”,“eye_2”等,口袋妖怪容器设置为“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 是我称之为 Eye 而 layoutPokemonContainer 是 Pokemon容器。我基本上做的是设置图像,如果没有创建,然后我删除使用索引..我知道图像前有3个元素..它有点脏,但我读过那个标签不应该用于查找视图在android = /。
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){//If the image doesn't exist I create it
ImageView matchupDetail = new ImageView(v.getContext());
matchupDetail.setImageDrawable(ContextCompat.getDrawable(v.getContext(),R.drawable.matchup_bug));
matchupDetail.setId(pokemon.getId());
View v1 = (View) v.getParent();
//I get the partent of the button (Pokemon layoutStatsContainer row)
LinearLayout v2 = (LinearLayout) v1.getParent();
//I get the parent of the statsContainer row (layoutPokemonContainer)
v2.addView(matchupDetail);
}else{//I remove the image from the view
View v1 = (View) v.getParent();//I get the partent of the button (Pokemon layoutStatsContainer row)
LinearLayout v2 = (LinearLayout) v1.getParent();//I get the parent of the statsContainer row (layoutPokemonContainer)
v2.removeViewAt(3);
}
}
});
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){//If the image doesn't exist I create it
ImageView matchupDetail = new ImageView(v.getContext());
matchupDetail.setImageDrawable(ContextCompat.getDrawable(v.getContext(),R.drawable.matchup_bug));
matchupDetail.setId(pokemon.getId());
View v1 = (View) v.getParent();
//I get the partent of the button (Pokemon layoutStatsContainer row)
LinearLayout v2 = (LinearLayout) v1.getParent();
//I get the parent of the statsContainer row (layoutPokemonContainer)
v2.addView(matchupDetail);
}else{//I remove the image from the view
View v1 = (View) v.getParent();//I get the partent of the button (Pokemon layoutStatsContainer row)
LinearLayout v2 = (LinearLayout) v1.getParent();//I get the parent of the statsContainer row (layoutPokemonContainer)
v2.removeViewAt(3);
}
}
});
我真的不知道如何使用编辑器让我疯狂..我无法让它正常工作。
答案 0 :(得分:0)
您可以在视图对象上设置标记:
view.setTag("eye_1");
E.g。你可以在OnClickListener中找回它:
public void onClick(View v) {
...
String myTag = (String) v.getTag() // getTag returns "Object"
doYourLogic(myTag);
...
}
来自java doc(View.java):
标记可用于标记其层次结构中的视图,但不必如此 在层次结构中是唯一的。
What is the main purpose of setTag() getTag() methods of View?