在动态生成的TextView中使用setOnClickListener()

时间:2015-11-01 19:46:28

标签: android android-layout textview

这是TextView布局。

<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 完成循环之后,然后点击文本视图,它如何记住特定的,因为它在循环内部

对此有任何澄清。

1 个答案:

答案 0 :(得分: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);
    }
}