findViewById Android返回多个结果

时间:2014-12-04 22:02:06

标签: android textview findviewbyid linkify

我已经创建了一个Android应用程序,它在scrollview中包含了relativelayout,并且无法在textview中点击我的链接。为了解决这个问题,我正在使用

TextView TextView = (TextView)findViewById(R.id.textview2);
TextView.setMovementMethod(LinkMovementMethod.getinstance());

所以,我知道findViewById()只返回第一个实例。如果我想要textView2,textView4和textView8 all成为链接,我该怎么办?我假设这里有一个for循环可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

每当你声明一个元素或创建它时,强烈建议指定一个唯一的id,至少如果它们将在同一个ViewGroup中。

在xml中:

<TextView android:id="@+id/txtId1" 
...
/>
<TextView android:id="@+id/txtId2" 
...
/>

或致电

  

View.setId(int id)

在你的情况下,在xml中分配它们会更容易,对每个TextView都这样做。 有了这些,你可以手动将它们添加到一个数组中并循环遍历它们:

阵列:

int[] viewArray = {R.id.txtId1, R.id.txtId2};

循环:

int size = viewArray.length;
for(int i = 0; i < size; i++) {
    TextView view = (TextView) findViewById(viewArray[i]);
    if(view != null) {
        view.setMovementMethod(LinkMovementMethod.getinstance());
    }
}

确保上面的代码位于让xml膨胀的活动中。例如:

setContentView(R.layout.activity_main);//This xml should contain the TextViews mentioned above.

否则,如果您要为自己的观看通话充气:

myView.findViewById(viewArray[i]);

有关详细信息,请查看View课程文档。

答案 1 :(得分:1)

鉴于您的上述评论,您有数百个TextView,您可以尝试以下方法:

假设这样的布局:

<LinearLayout android:id="container" ...
   <TextView android:id="tv1" ... />
   <TextView android:id="tv2" ... />
   <TextView android:id="tv3" ... />
    ....
   <TextView android:id="tv300" ... />
</LinearLayout>

您可以执行以下操作:

LinearLayout container = (LinearLayout)findViewById(R.id.container);
int count = container.getChildCount();
for (int i=0; i<count; i++) {
    View v = container.getChildAt(i);
    if (v instanceof TextView) {
          TextView tv - (TextView)v;
          tv.setMovementMethod(LinkMovementMethod.getinstance());
    }
}