2017-10-14 26 views
0

如何通過findViewById作爲參數?如何訪問findViewById()外活動

我想創建方法:

public void makeText() { 
    String random = randomize(); //example... 
    TextView textView = (TextView) findViewById(R.id.textView); 
    textView.setText(randomText); 
} 

但當然這種方法不具有功能findViewById。方法makeTextActivityFragment之外。

+0

您應該傳遞'TextView'的一個實例作爲參數。然後你可以做'yourTextView.setText(randomText)' –

+3

[非活動類中的findViewById]可能的重複(https://stackoverflow.com/questions/25807205/findviewbyid-in-non-activity-class) –

回答

3

您應該將活動實例傳遞給您的類或方法。

public void makeText(Activity activity) { 
    String random = randomize(); //example... 
    TextView textView = (TextView) activity.findViewById(R.id.textView); 
    textView.setText(randomText); 
} 
2

首先,在活動或片段類之外編輯控件屬性是個壞主意。將上下文對象作爲Activity傳遞也不是最好的想法,但我必須將它作爲參數ViewGroup傳遞,它是您視圖的根,並且在其上調用findViewById

個人我會推薦通過方法查看你想編輯。

+0

所以我該怎麼做?我不想重複代碼。在幾個活動中,我有這個代碼,所以我想在一個地方。 – fapevasoz

+0

使基本Activity/Fragment從它繼承。畢竟,我仍然沒有看到任何案例來制定這樣的全球方法。 –

0

將活動的實例作爲參數傳遞是反模式並請求內存泄漏。經驗法則是:如果你想操作視圖,在UI層(活動/片段/自定義視圖等)上執行,但不要再傳遞它們。

所以,如果你想編輯文本,在活動/片段/任何內部膨脹這個視圖,並傳遞給它一個新的值。