我已经创建了一个Android应用程序,它在scrollview中包含了relativelayout,并且无法在textview中点击我的链接。为了解决这个问题,我正在使用
TextView TextView = (TextView)findViewById(R.id.textview2);
TextView.setMovementMethod(LinkMovementMethod.getinstance());
所以,我知道findViewById()只返回第一个实例。如果我想要textView2,textView4和textView8 all成为链接,我该怎么办?我假设这里有一个for循环可以解决这个问题吗?
答案 0 :(得分:2)
每当你声明一个元素或创建它时,强烈建议指定一个唯一的id,至少如果它们将在同一个ViewGroup中。
在xml中:
<TextView android:id="@+id/txtId1"
...
/>
<TextView android:id="@+id/txtId2"
...
/>
或致电
在你的情况下,在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());
}
}