在Android

时间:2017-06-21 15:19:24

标签: android android-layout

我会尽量做空。

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

中是不可能的

Application Image HERE

在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); } } });

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

1 个答案:

答案 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?