Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
findViewById Android返回多个结果_Android_Textview_Findviewbyid_Linkify - Fatal编程技术网

findViewById Android返回多个结果

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()将只返回第一个实例。如果我想让

我很抱歉,我创建了一个android应用程序,它在scrollview中集成了relativelayout,并且很难使我在textview中的链接可点击。为了解决这个问题,我正在使用

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。我将更改代码以使其更清晰。如果这实际上是您问题的答案,请确保将其标记为。