2017-09-15 56 views
0

我有一個Android XML結構如下。我想當一個子佈局或其內容(TextView或Image)被點擊時,一個clickListener被觸發來做一些動作。問題是佈局是隨機生成的,並且太多以至於沒有單獨的點擊監聽器。實現onClick偵聽器到多個子佈局

解決這個問題的最佳方法是什麼?到目前爲止,我已經設置了子佈局,setClickable(真)和他們的孩子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> 

編輯 我有這樣

 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

編寫類MyClickListener它實現OnClickListeneronClick方法內處理您的來電,例如:

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 
    } 
} 
您的活動代碼

然後設置onClickListenerMyClickListener

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

有位調整到這應該工作的代碼。

@ LunarWatcher建議的另一種方法是在同一個類中,您可以直接實現OnClickListener接口並在裏面添加onClick()方法。兩種方式都可以工作。

+0

儘管這可以在沒有自定義onClickListener類的情況下完成。並且它仍然假定視圖有聽衆設置 – Zoe

+0

@LunarWatcher我沒有得到它,因爲他說'問題是佈局是隨機生成的,並且有太多人沒有單獨的點擊監聽器。「這意味着聽衆在那裏,但他需要在click上添加'someAction',這意味着他需要爲每個視圖聲明onClickListener'太多,不能單獨使用點擊監聽器。或者通過一個on class實現來完成。 –

+0

你基本上可以將該方法複製粘貼到類中並實現'OnClickListener'而不是爲了一個目的創建一個全新的類 – Zoe