2014-12-04 70 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