2015-11-01 79 views
0

這是TextView佈局。在動態生成的TextView中使用setOnClickListener()

<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/trailer" 
    android:paddingTop="5dp" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textStyle="bold" 
    android:textSize="16sp"/> 

這是主要的根部佈局。

 <LinearLayout 
     android:id="@+id/review_layout" 
     android:layout_marginTop="16dp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
    </LinearLayout> 

而這一段代碼添加textViews作爲上述線性佈局的childView,基於來自服務器的響應的總數。現在

@Override 
    public void addData(List<MovieVideoData> movieVideoDataList) { 
     trailerLinearLayout.removeAllViews(); 
     List<TextView> textViews = new ArrayList<TextView>(); 
     for (MovieVideoData movieVideoData:movieVideoDataList){ 
      View view = getActivity().getLayoutInflater().inflate(R.layout.trailer_text_view,trailerLinearLayout,false); 
      ((TextView)view.findViewById(R.id.trailer)).setText(movieVideoData.getName()); 
      textViews.add(((TextView)view.findViewById(R.id.trailer))); 
      trailerLinearLayout.addView(view); 
     } 
    } 

,爲其在線性佈局增加,對這些的點擊每個TextView的對象我想打開特定於該TextView的一個Youtube視頻鏈接。

我想知道,我應該如何使用每個textView的setOnClickListener()作爲ID都是相同的。

任何建議,將不勝感激。

我加了這段代碼,它工作正常。

private void watchYoutubeVideo(String key){ 
     try{ 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:" + key)); 
      startActivity(intent); 
     }catch (ActivityNotFoundException ex){ 
      Intent intent=new Intent(Intent.ACTION_VIEW, 
        Uri.parse("http://www.youtube.com/watch?v="+key)); 
      startActivity(intent); 
     } 
    } 


textView.setText(movieVideoData.getName()); 
      trailerLinearLayout.addView(view); 
      final String key = movieVideoData.getKey(); 
      textView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        watchYoutubeVideo(key); 
       } 
      }); 

在點擊每個文本視圖時,它會在youtube上打開各自的鏈接,這很好。

什麼我不知道的是,完成後循環movieVideoDataList,然後在文本視圖,它是如何記住具體關鍵,因爲它在循環內的點擊。

任何類型的澄清,將不勝感激。

+0

簡單的方法是將不同的實例分配給每個TextView的 – Blackbelt

+0

我想你可以新的偵聽設置爲每一個或者邏輯是相同的,也許你可以附加一個在你的活動中定義的聽衆 – kirotab

+0

@Blackbelt謝謝你的回覆,我想過了。但是,如果我的arrayList的大小是10+,那怎麼辦?在這種情況下,如果必須爲所有對象設置偵聽器,並且我的代碼將不必要地增長。我想知道,如果有更好的解決方案。 – Ritesh

回答

2

我可能失去了一些東西,但爲什麼不只是做這樣的:

@Override 
public void addData(List<MovieVideoData> movieVideoDataList) { 

    trailerLinearLayout.removeAllViews(); 

    List<TextView> textViews = new ArrayList<TextView>(); 

    for (MovieVideoData movieVideoData:movieVideoDataList){ 

     View view = getActivity().getLayoutInflater().inflate(R.layout.trailer_text_view,trailerLinearLayout,false); 
     TextView tv = (TextView)view.findViewById(R.id.trailer); 
     tv.setText(movieVideoData.getName()); 
     textViews.add(tv); 

     tv.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //set the url of your video and action you want to perform 
      } 
     }); 

     trailerLinearLayout.addView(view); 
    } 
} 
+0

謝謝你,它的工作。你可以看看我編輯的問題。 – Ritesh

+0

您爲每個聽衆指定了不同的關鍵詞,不是嗎? –

+0

是的,它是這樣的,當你在每個新的文本視圖上用他們的特定鍵設置onclickListener時,這個鍵將被存儲爲onclicklistener對象的屬性? – Ritesh