2016-06-11 48 views
1

我想將EditText動態添加到片段中。 我也想爲此EditText添加一個字符串ID。 下面的代碼按下一個按鈕後叫:動態添加EditText(如果可能)將字符串ID動態添加到片段中

int number_of_editTexts; //At the beginning=0 
Context context = getActivity(); 
EditText editText = new EditText(context); 
editText.setId("NofET"+number_of_editTexts); 
RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
         RelativeLayout.LayoutParams.WRAP_CONTENT); 

params.addRule(RelativeLayout.CENTER_HORIZONTAL); 
editText.setLayoutParams(params); 
RelativeLayout rel=(RelativeLayout) getView().findViewById(R.id.list); 
rel.addView(editText); 
number_of_editTexts++; 

它添加的EditText,但我不能寫editText.setId("NofET"+numer_of_editTexts); but only editText.setId(numer_of_editTexts);

有沒有辦法做我想要什麼? 而且,我怎樣才能做到像params.addRule(RelativeLayout.BELOW,R.id.DYNAMIC_ID)這樣的東西?

+0

該ID始終是一個整數值 - 當您編譯時,xml Id將滾動到一個int中。 – SQLiteNoob

+0

對於您的問題的第一部分,請參閱http://stackoverflow.com/questions/22527883/android-set-edit-text-or-text-view-id-programmatically。 –

+0

如果您可以包含您試圖達到的佈局的圖表,也許我可以幫助您更好。 –

回答

0

元素ID是純整數,它們不能設置爲字符串。分配給以XML創建的元素的ID將在內部轉換爲整數並存儲爲int。

默認情況下,動態創建的元素始終具有-1的ID。他們可以通過setID()手動分配ID,但有可能與系統自動創建的其他ID衝突。

爲了防止這種衝突,可以使用this answer中給出的方法手動分配ID。

編輯:基本上,鏈接說,如果你有API級別17+,你用View.generateViewId()否則,如果你做手工,你不去以上至0x00FFFFFF作爲ID,因爲這些被保留用於靜態創建的元素。除此之外,避免通過您的代碼創建的ID之間的衝突。

但是,在這個問題的情況下,LinearLayout可能是更好的方法。

假設這是你的XML。

<LinearLayout 
     android:id="@+id/list" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:orientation="vertical" 
     android:gravity="center_horizontal"/> 

的Java代碼添加一個EditText到這可能是類似以下內容:

List<EditText> edittexts; 
... 
LinearLayout rel=(LinearLayout) getView().findViewById(R.id.list); 
... 

void addEditText(Context myContext,int edittextno) 
{ 
    EditText ed=new EditText(myContext); 
    ed.setText("EditText"+edittextno); 
    LayoutParams lParamsMW = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
    ed.setLayoutParams(lParamsMW); 
    edittexts.add(ed); 
    rel.addView(ed); 
} 

您可以通過列表edittexts修改所有創建EditTexts。

垂直LinearLayout自動給出OP所需的垂直列表格式。如果需要,可以爲每個添加的元素添加餘量。如果需要在EditText的左側或右側添加更多元素,可以動態創建水平LinearLayout,添加元素和水平。 LinearLayout以與上面代碼類似的方式添加到靜態代碼中。

+0

我覺得像一個ArrayAdapter,膨脹EditTexts仍然是一個更好的解決方案 –

+0

在任何情況下,你可能想要在你添加的視圖上設置LayoutParams –

+0

如果每一行(我會稱它是一個ArrayAdapter現在行)在佈局中有多個元素。 此外,我認爲只有與RelativeLayout相關的LayoutParams需要ID。 'RelativeLayout.BELOW','RelativeLayout.RIGHT_OF' –