我想将EditText动态添加到Fragment中。 我还想在这个EditText中添加一个String 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 :(得分:0)
元素ID是纯整数,不能设置为字符串。分配给在XML中创建的元素的ID在内部转换为整数,并存储为int。
默认情况下,动态创建的元素的ID始终为-1。可以通过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"/>
将EditText添加到此的Java代码可能类似于以下内容:
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);
}
您可以通过List edittexts修改所有创建的EditTexts。
垂直LinearLayout自动给出OP所需的垂直列表格式。如果需要,可以为每个添加的元素添加边距。如果需要在EditText的左侧或右侧添加更多元素,可以动态创建水平LinearLayout,添加元素和水平。 LinearLayout以与上面代码类似的方式添加到静态。