2013-10-01 75 views
0

我在嘗試使用同一文本設置多個文本視圖時遇到問題。我有多個TextViews需要設置相同的值。我一直在做的就是使用每個ID並獨立設置每個ID的值,但這看起來效率不高。基本上我做的是:使用相同的Tag/ID在多個TextView中更改文本

((TextView)findViewById(R.id.text_1_1)).setText("text 1"); 
((TextView)findViewById(R.id.text_1_2)).setText("text 1"); 
((TextView)findViewById(R.id.text_2_1)).setText("text 2"); 
((TextView)findViewById(R.id.text_2_2)).setText("text 2"); 
..... 
((TextView)findViewById(R.id.text_5_1)).setText("text 5"); 
((TextView)findViewById(R.id.text_5_2)).setText("text 5"); 

我不希望每個TextView的一個全局變量保存在我的課,因爲有這麼多。有沒有一個首選的方法來實現這個或更簡單的方法?

+0

對於這個數量的觀點(10),在最方便的方法中,我不認爲任何東西都是值得的。如果還有更多,也許你可以使用反射。 – SJuan76

+0

你是否嘗試使用ListView或相同的視圖? –

+4

任何時候你有大量的視圖,你應該想自己是否可以更好地實現你想要的某種AdapterView(即ListView,GridView等)。幾乎總是答案是肯定的。沒有更多關於你想要達到的內容的背景,雖然我不能指出你更具體的方向。至少你應該保留對你的TextViews的引用。 'findViewById()'是一個相對昂貴的方法來調用。每次需要更改文字時調用它都會降低性能。 – FoamyGuy

回答

2

您可以將您的視圖中使用標籤:只要使用相同的標記(例如組1)對於屬於同一組的textviews。然後致電fix(yourRootView, "group1", "the_new_value");

protected void fix(View child, String thetag, String value) { 
     if (child == null) 
      return; 

     if (child instanceof ViewGroup) { 
      fix((ViewGroup) child, thetag, value); 
     } 
     else if (child instanceof TextView) { 
      doFix((TextView) child, thetag, value); 
     } 
    } 

    private void fix(ViewGroup parent, String thetag, String value) { 
     for (int i = 0; i < parent.getChildCount(); i++) { 
      fix(parent.getChildAt(i), thetag, value); 
     } 
    } 
    private void doFix(TextView child, String thetag, String value) { 
     if(child.getTag()!=null && child.getTag().getClass() == String.class) { 
      String tag= (String) child.getTag(); 
      if(tag.equals(thetag)) { 
       child.setText(value); 
      } 
     } 
    } 
+0

謝謝,這正是我正在尋找。我曾嘗試過類似的東西,但無法完全理解。 – wchristiansen