将EditText动态添加(如果可能)String id到Fragment中

时间:2016-06-11 13:42:04

标签: android android-edittext

我想将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)之类的事情?

1 个答案:

答案 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以与上面代码类似的方式添加到静态。