2016-07-08 18 views
0

我正在創建一個動態數量的editTexts,並且最終需要爲每個ID調用EditText上的.getText()。無法以編程方式設置EditText ID

不過,我注意到,這是很難以編程方式設置ID,所以我使用的.setTag()方法:

private void createAnswerChoice(int answerNumber) { 
    ViewGroup layout = (ViewGroup) mRootView.findViewById(R.id.create_poll_questions_answer_layout); 
    EditText editText = new EditText(getActivity()); 
    editText.setHint(getResources().getString(R.string.answer_text) + " " + answerNumber); 
    editText.setSingleLine(true); 
    editText.setImeOptions(EditorInfo.IME_ACTION_DONE); 
    String editTextID = ((getResources().getString(R.string.created_answer_editText_id))+String.valueOf(answerNumber)); 
    editText.setTag(editTextID); 
    Toast.makeText(getActivity().getApplicationContext(), editTextID, Toast.LENGTH_SHORT).show(); 
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    editText.setLayoutParams(layoutParams); 
    TextInputLayout newAnswer = new TextInputLayout(getActivity()); 
    newAnswer.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
    newAnswer.addView(editText, layoutParams); 
    layout.addView(newAnswer); 
} 

我怎麼會得到每個EDITTEXT的值,如果我知道標記而不是ID?另外,.setTag()方法的目的是什麼(它與.setID()有什麼關係?)

+2

什麼是設置ID的問題? – pratnala

+0

如果您使用的是android,那麼建議使用xml而不是以編程方式創建視圖。它更容易進行更改並提供更清晰的代碼 – suku

+0

我正在創建基於用戶選擇的數字的動態視圖,因此靜態XML(據我所知)將不夠用 – tccpg288

回答

0

我不建議使用標籤從層次結構中獲取視圖,但如果您必須這樣做,要做到這一點:https://stackoverflow.com/a/16262479/6526330

當您需要在視圖中緩存一些數據以便稍後再次獲取視圖時使用標記(是的,我知道非常通用)。例如,如果您在列表視圖中使用持有者,或者您在屏幕上有很多視圖,並且需要全局點擊偵聽器與每個視圖的偵聽器。我從the answers on this post中偷走了這兩個例子,這些例子在描述用例方面比我能做得更好。

0

findViewById()findViewWithTag()是旨在獲得對從XML充值的View的引用的方法。

如果您正在創建View s,您已經擁有它們,那麼就不需要使用這些方法。在某處保留對View的引用。

2

創建RES /價值/ id.xml

<?xml version="1.0" encoding="utf-8"?> 
    <resources> 
    <item 
    type="id" 
    name="edittext_hello" /> 
    </resources> 

,然後設置資源文件(id.xml),

editText.setId(R.id.edittext_hello);