2014-12-04 73 views
0

我已经创建了一个android应用程序,它包含scrollview中的一个relativelayout,并且无法使我的链接在textview内点击。要解决此问题,我正在使用findViewById Android返回多个结果

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

所以,我知道findViewById()将永远只返回第一个实例。如果我想让textView2,textView4和textView8都成为链接,我该怎么办?我假设这里的for循环会做到这一点?

+1

我没有看到问题。不会每个这些TextView有一个唯一的ID?因此你简单地为每一个调用findViewById。例如TextView TextView4 =(TextView)findViewById(R.id.textview4); – EJK 2014-12-04 22:04:45

+1

'findViewById()只会返回第一个实例'。只有一个实例。 R.id.xxxx是独一无二的。 – Simon 2014-12-04 22:06:23

+0

以下行是'TextView4.setMovementMethod(..)'是否正确?我可以做到这一点,我将这样做约300文本视图,然而 – 2014-12-04 22:07:31

回答

1

鉴于你,你有数百TextViews的上述评论,你可以尝试以下方法:

假设这样的布局:

<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()); 
    } 
} 
+0

这看起来好像会起作用,但是,我并不需要每个textView设置为一个链接。如果不是我所有的textView都需要链接呢? 更具体地说,如果我有textview.setMovementMethod(...)在没有链接的textview上,这是否会抛出我的程序?无论如何,因为你给我的答案足够好用 – 2014-12-04 22:20:59

+0

你可以在ID中编码这些信息.... – EJK 2014-12-04 22:21:52

+0

在这种情况下,它需要所有的孩子。就像你提到的那样,如果你知道哪些是你要设置的链接,更不用说不是所有的都可以是相同的类型,你可以使用我发布的解决方案。 – Toguard 2014-12-04 22:22:33

2

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

在XML:

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

或致电

View.setId(int id)

在你的情况下,它会更容易分配这些在XML中,为每个TextViews的这样做。 一旦你拥有了这些,你可以手动将其添加到一个数组和循环通过他们:

阵:

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类文档。

+0

这个对我来说很有意义,而且正是我所期待的。但是,它没有工作。不过,我确实需要一些推文。非常感谢你的帮助! – 2014-12-05 15:40:12

+0

再次确保您为每个TextView定义了XML中的唯一ID,然后在数组中使用相同的ID。我会更改代码以使其更清楚。 – Toguard 2014-12-05 18:26:38

+0

如果这实际上是您的问题的答案,请确保将其标记为如此。 – Toguard 2014-12-10 18:28:37