findViewById Android返回多个结果
我很抱歉,我创建了一个android应用程序,它在scrollview中集成了relativelayout,并且很难使我在textview中的链接可点击。为了解决这个问题,我正在使用findViewById Android返回多个结果,android,textview,findviewbyid,linkify,Android,Textview,Findviewbyid,Linkify,我很抱歉,我创建了一个android应用程序,它在scrollview中集成了relativelayout,并且很难使我在textview中的链接可点击。为了解决这个问题,我正在使用 TextView TextView = (TextView)findViewById(R.id.textview2); TextView.setMovementMethod(LinkMovementMethod.getinstance()); 因此,我知道findViewById()将只返回第一个实例。如果我想让
TextView TextView = (TextView)findViewById(R.id.textview2);
TextView.setMovementMethod(LinkMovementMethod.getinstance());
因此,我知道findViewById()将只返回第一个实例。如果我想让textView2、textView4和textView8都成为链接,我该怎么办。我假设这里的for循环可以解决这个问题?鉴于您上面的评论,您有数百个文本视图,您可以尝试以下方法:
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());
}
}
假设布局如下所示:
<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());
}
}
假设布局如下所示:
<LinearLayout android:id="container" ...
<TextView android:id="tv1" ... />
<TextView android:id="tv2" ... />
<TextView android:id="tv3" ... />
....
<TextView android:id="tv300" ... />
</LinearLayout>
无论何时声明或创建元素,强烈建议指定一个唯一的id,至少如果它们将位于同一视图组中
在xml中:
<TextView android:id="@+id/txtId1"
...
/>
<TextView android:id="@+id/txtId2"
...
/>
循环:
否则,如果您正在膨胀自己的视图调用:
myView.findViewById(viewArray[i]);
有关更多信息,请查看类文档。无论何时声明或创建元素,强烈建议指定唯一的id,至少如果它们将位于同一视图组中
在xml中:
<TextView android:id="@+id/txtId1"
...
/>
<TextView android:id="@+id/txtId2"
...
/>
循环:
否则,如果您正在膨胀自己的视图调用:
myView.findViewById(viewArray[i]);
有关更多信息,请查看课堂文档。我看不出问题所在。这些文本视图不是都有唯一的ID吗?因此,您只需为每一个调用findviewbyd。e、 g.TextView TextView4=(TextView)findViewById(R.id.TextView4)findviewbyd()将只返回第一个实例
。只有一个例子。R.id.xxxx是唯一的。下面的行是“TextView4.setMovementMethod(..”,对吗?我可以做到这一点,我将为大约300个文本视图做这件事,但是好吧,我看到了问题所在,为什么循环是有益的。我有一些想法。我会在一分钟内发布一个答案…谢谢你--我期待着明天早上看到它(晚上去另一个办公室)我没有看到问题。这些文本视图不是都有唯一的ID吗?因此,您只需为每一个调用findviewbyd。e、 g.TextView TextView4=(TextView)findViewById(R.id.TextView4)findviewbyd()将只返回第一个实例
。只有一个例子。R.id.xxxx是唯一的。下面的行是“TextView4.setMovementMethod(..”,对吗?我可以做到这一点,我将为大约300个文本视图做这件事,但是好吧,我看到了问题所在,为什么循环是有益的。我有一些想法。我会在一分钟内发布一个答案…谢谢你--我期待着明天早上看到它(晚上去另一个办公室)。看起来它会起作用,但是,我不需要将每个textView设置为链接。如果不是我所有的文本视图都需要链接怎么办?更具体地说,如果我在一个没有链接的textview上有textview.setMovementMethod(…),这是否会中断我的程序?不管怎样,因为你给我的答案会很好的,在这种情况下,需要所有的孩子。正如您所提到的,如果您知道要将哪些设置为链接,更不用说并非所有设置都是相同的类型,您可以使用我发布的解决方案。例如,在XML布局文件中,使用id“clickableTextView1”、“clickableTextView2”等。然后在Java代码中,检查textView的ID,仅当ID以字符串“clickable”开头时才采取行动。这会奏效的。你的第一个答案真的帮我解决了这个问题。在ID中添加一些东西的困难在于,我在relativelayout中构建了整个东西,也就是说,更改一个的名称需要在其他几个地方更改它。但是我们生活和学习,我想这是我最后一次也是唯一一次在ScrollView中使用relativelayout。看起来它会起作用,但是,我不需要每个textView都设置一个链接。如果不是我所有的文本视图都需要链接怎么办?更具体地说,如果我在一个没有链接的textview上有textview.setMovementMethod(…),这是否会中断我的程序?不管怎样,因为你给我的答案会很好的,在这种情况下,需要所有的孩子。正如您所提到的,如果您知道要将哪些设置为链接,更不用说并非所有设置都是相同的类型,您可以使用我发布的解决方案。例如,在XML布局文件中,使用id“clickableTextView1”、“clickableTextView2”等。然后在Java代码中,检查textView的ID,仅当ID以字符串“clickable”开头时才采取行动。这会奏效的。你的第一个答案真的帮我解决了这个问题。在ID中添加一些东西的困难在于,我在relativelayout中构建了整个东西,也就是说,更改一个的名称需要在其他几个地方更改它。但是我们生活和学习,我想这是我最后也是唯一一次在ScrollView中使用relativelayout。这一次对我来说很有意义,也正是我想要的。然而,它没有起作用。然而,我确实让它和几个特威克一起工作。非常感谢你的帮助!再次确保在XML中为每个TextView定义一个唯一的id,然后在数组中使用相同的id。我将更改代码以使其更清晰。如果这确实是您问题的答案,请确保将其标记为这样。这对我来说很有意义,并且正是我所寻找的。然而,它没有起作用。然而,我确实让它和几个特威克一起工作。非常感谢你的帮助!再次确保在XML中为每个TextView定义一个唯一的id,然后在数组中使用相同的id。我将更改代码以使其更清晰。如果这实际上是您问题的答案,请确保将其标记为。