2016-08-13 59 views
0

我有一個textView,它首次在主活動onCreate文件中創建。像這樣如何設置主活動中定義的視圖的文本(無XML)

Button btn = new Button(); 

然後我設置像一個標識它的一些屬性和一些的LayoutParams

btn.setText("Button"); 
btw.setId("btn"); 
btn.setLayoutParams(new ViewGroup.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT, 
    ViewGroup.LayoutParams.WRAP_CONTENT)); 

所以我的問題是我怎麼能訪問同一個文件內,這個ID來改變的文本按鈕。像

findViewById(R.id.btn); 

除了當我這樣做,我得到一個錯誤。我假設這是因爲這沒有在XML中定義。

編輯:我不能預先在xml中定義這些按鈕,因爲它們是基於程序的其他因素生成的。

謝謝。

+0

爲什麼你需要它的ID?在'MainActivity'內定義'Button'作爲全局變量,並在該文件內的任何位置使用它。 –

+0

@Yildirim是的,但我需要基於輸入的ID,我可以相應地更新按鈕。 –

+0

'findViewById'通常用於擴充您在活動的相應XML文件中定義的UI元素,而不是用於在Java代碼中創建的UI元素。 –

回答

1

findViewById()得到一個整數,所以爲了獲得對你動態創建的TextView的引用,只需將相同的ID傳遞給這個方法即可。

// Assign it ID 100, for example, when you're creating it 
btw.setId(100); 

在這個例子中,你可以使用發現:

TextView textView = (TextView) findViewById(100); 

注意findViewById僅發現連接到層次的意見,所以你應該確保你已經連接你的動態創建TextView的層次結構。


備用方式:保存基準作爲一類構件。

首先定義MainActivity類的私人類成員。然後在onCreate方法中初始化它。因此,無論您在活動類中何處需要此TextView,都可以使用該類成員。

public class MainActivity extends Activity{ 
    // This is the class member, I was talking about 
    private TextView mTextView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     mTextView = new TextView(this); 
     mTextView.setText("Button"); 

     mTextView.setLayoutParams(new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT)); 
    } 


    public void someMethod(){ 
     // Here you can reach to that TextView by using its reference saved in mTextView 
     mTextView.setText("Hi there!"); 
    } 
} 
+0

是的,我已經做到了。有沒有辦法做到這一點沒有findViewById?那麼你可以繞過集成ID分配? –

+0

@Fidel_Willis您可以簡單地將引用保存爲類成員。 –

+0

@Fidel_Willis或者你可以做'setTag'和'findViewWithTag'。 –

相關問題