2017-09-15 18 views
0

私は以下のようなアンドロイドXML構造を持っています。子レイアウトやそのコンテンツ(TextViewやImage)がクリックされたときに、clickListenerがsomeActionを実行するためにトリガーされるようにしたいと思います。問題は、レイアウトがランダムに生成され、クリックリスナーで個別に作成するには多すぎるということです。複数の子レイアウトに対してonClickリスナーを実装する

これを解決する最良の方法は何ですか。これまでのところ私は(偽)setClickableに

 //MainLayoutContaining multiple children 
     <Layout 1 > 
      //This Layouts here are randomly generated programatically 
      <Layout Child 1> 
       <Textview /> 
       <ImageView /> 
       <Textview /> 
      </Layout Child 1> 
      <Layout Child 2> 
       <Textview /> 
       <ImageView /> 
       <Textview /> 
      </Layout Child 3> 
       . 
       . 
       . 
       . 
      //End of Child Layouts 
     </Layout 1> 

をsetClickable(真)とその子の子のレイアウトを設定している編集 私はこの

 for(int i=0;i<newsFeedArray.length(); i++){ 
      LinearLayout a = new LinearLayout(getApplicationContext()); 
      a.setOrientation(LinearLayout.VERTICAL); 
      a.setClickable(true); 
      a.setOnClickListener(myListener);//New Code From Answer 

      articleTitle.setText(articleItemTitle.toUpperCase()); 
      articleTitle.setClickable(false); 

      TextView articleBody = new TextView(getApplicationContext()); 
      articleBody.setText(html2text(articleItemIntrotext)); 
      articleBody.setClickable(false); 

      a.addView(articleTitle); 
      a.addView(articleImage); 
      a.addView(articleBody); 
     } 

のようなループは、私が今までできていています各レイアウトのonClickを検出します。今私が望むのは、クリックされたその子レイアウトのIDを検出することです。

答えて

4

OnClickListenerを実装し、onClickメソッド内で自分のコールを処理クラスMyClickListener、例書く:ビット調整をonClickListener

MyClickListenerから
MyClickListener myListener = new MyClickListener(); 
someView.setOnClickListener(myListener); 

を設定し、あなたのアクティビティコードに続いて

public class MyClickListener implements OnClickListener{ 

    @Override 
    public void onClick(View v){ 
     if(v instance of TextView) 
     // do what you want with textview 
     // or another apporach 
     // detect which id had been clicked from your views 
    } 
} 

をこれはうまくいくはずです。

@ LunarWatcherの別のアプローチは、同じクラスにあり、OnClickListenerインターフェイスを直接実装し、内部にonClick()メソッドを追加することができます。両方の方法が有効です。

+0

これは、カスタムのonClickListenerクラスなしでも実行できます。それはまだ視聴者が視聴者に設定されていると仮定しています – Zoe

+0

@ LunarWatcher「問題はレイアウトがランダムに生成され、クリックリスナーで個別に持つことが多すぎます」と聞いています。クリックに 'someAction'を追加する必要があります。これは、各ビューに対してonClickListenerを宣言する必要があることを意味します(クリックリスナーで個別に表示するにはあまりにも多くあります)。またはオンクラス実装で行うことができます。 –

+0

基本的には、そのメソッドをクラスにコピーして貼り付け、1つの目的のために新しいクラス全体を作成するのではなく、 'OnClickListener'を実装することができます – Zoe

関連する問題