2017-06-21 27 views
2

私は短くしようとします。androidで動的に作成されたビューを取得する

これはポケモンアプリです。 ポケモンコンテナ要素を動的に追加し、ユーザーがの目を入力すると、のコンテナの下に画像が表示されます。私は目を「トグル」にしたい:ユーザがそれを押すと、それぞれポケモンコンテナの下に画像が表示され、もう1度クリックすると画像が消えてしまいます。だから私は目のポケモンコンテナのIDの種類を関連づけて、クリックして正しい画像を削除する必要があることを知る必要があります。私は目のアイコンとコンテナのためにそれが繰り返されるので、setId()を使うことはできません。アンドロイドでは不可能であるので、私はまた、私はなど、「eye_1」、「eye_2」のようなものにIDを設定することができますXMLで..

Application Image HERE

を文字列IDを設定することはできませんポケモンコンテナを "container_1"、 "container_2"などに変更しました。そのため、onClick()の内部で、押されている目のアイコンの番号を取得して画像を表示/削除できました。

私はアンドロイドでこれを行う方法はわかりません。私はIDで要素を取得するHTML上でそれを行うことができますので、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はI私はとlayoutPokemonContainerポケモンコンテナある・アイと呼ばきたものです。私が基本的にしているのは、画像が作成されていない場合にインデックスを使用して削除する場合です。画像の前に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

あなたはビューオブジェクトにタグを設定することができます。

view.setTag("eye_1"); 

例えばあなたはOnClickListenerでそれを取り戻すことができます。タグは、その階層内のビューをマークするために使用することができ、ユニークである する必要はありません

:Javaのドキュメント(View.java)から

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

階層内にあります。

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

+0

私は解決策を見つけましたが、あなたが優れている場合、私はそれを使用し、有効なものとしてマークしたがv.getTag()は、文字列、int型のみを受け入れるdoens'tます。そして、アイデアは、このように "eye _" + String.valueOf(pokemon.getId()) – Fragsman

+0

このように関連付けられた(またはタグ付けされた)動的な要素を持っているので、タグ付きXMLを作成することはできません。もちろん、View.getTag文字列パラメータ! XML属性ではありません。私は私の答えを編集します。たとえば、タグは通常ViewHolderパターン(ListViewとともに)で使用され、開発者ガイドの推奨方法です:https://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolderタグと思うあなたが必要なものです;) – BenRoob

+0

あなたのポケモンオブジェクトであなたの意見をすることもできます:) – BenRoob

関連する問題