【问题标题】:How to add text in dynamically added EditTexts如何在动态添加的 EditTexts 中添加文本
【发布时间】:2016-05-26 03:27:46
【问题描述】:

我想在动态添加的 EditTexts 中添加文本。 至于现在它只是添加一个包含两个 EditText 的布局,它会在按钮单击时添加到 LinearLayout。

如何设置这些 Editexts 的文本?因为现在我可以添加任意数量的内容,并且每个 EditText 都具有与布局文件中相同的 id。

我的 mainactivity.java 与按钮点击膨胀看起来像这样:

final LinearLayout mView = (LinearLayout) getLayoutInflater().inflate(R.layout.more_rest_main, null);
mView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
restLayout.addView(mView); 

这是我对 more_rest_main.xml 的布局

 <EditText
    android:layout_width="150dp"
    android:layout_height="wrap_content"
    android:id="@+id/added_rest_from"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:hint="@string/time_from"
    android:textSize="15dp"
    android:focusable="false"/>

 <EditText
    android:layout_width="150dp"
    android:layout_height="wrap_content"
    android:id="@+id/added_rest_to"
    android:layout_alignParentTop="true"
    android:layout_alignParentEnd="true"
    android:hint="@string/time_to"
    android:textSize="15dp"
    android:focusable="false" />

【问题讨论】:

    标签: android android-layout layout-inflater


    【解决方案1】:

    这里要理解的是,您可以在任何ViewGroup 中查找子视图(LinearLayoutViewGroup)。

    您可能熟悉在 Activity onCreate 中检索 View,在调用 setContentView 之后,您可以使用 findViewById 访问任何 View

    因此,在扩充您的ViewGroup 之后,您可以使用在 Activity onCreate 中使用的相同方法,但您需要查找 ViewGroup 的子视图:

    final LinearLayout mView = (LinearLayout) getLayoutInflater().inflate(R.layout.more_rest_main, null);
    
    EditText txtAddedRestFrom = (EditText)mView.findViewById(R.id.added_rest_from);
    
    restLayout.addView(mView); 
    

    获得参考后,您可以在 EditText 上调用任何方法,例如 setText

    【讨论】:

      【解决方案2】:

      你可以像下面这样动态创建一个 EditText:

      EditText editText = new EditText(myContext);
      editText.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
      //add the same logic as in the XML file
      mView.addView(editText);
      

      您还可以动态设置 ID。如果您使用的是 API 17 及更高版本,请执行以下操作:

      editText.setId(View.generateViewId())
      

      否则,您可以将您选择的正整数设置为 ID,而不是使用:

      View.generateViewId() 
      

      使用上面的代码,由于这些代码是动态添加的,因此您不需要 XML 文件,因为 EditTexts 将动态创建。 如果要保留现有的 XML 文件,只需调用

      setTag() 
      

      到每个膨胀的 EditTexts 并在 setTag 方法中设置一个唯一值。这样你就可以区分 EditTexts。既然你可以做到这一点,你可以为每个人添加你需要的任何文本。

      要回复您的评论,关于如何设置 OnCLickListener:

      editText.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
             // here you can get either the Tag or the ID that
             // you've set dynamically. And do whatever you like to do
             view.getTag()
             view.getId()
          }
      });
      

      【讨论】:

      • 如果我想添加一个clicklistener,这个方法是如何工作的
      • @alexandermogren 你想在哪里添加点击监听器?
      • 我想在动态创建edittexts之后添加一个clicklistener并检查你是否点击它。
      • @alexandermogren 请查看更新后的答案
      • 我认为我不是在这里做事。我的按钮looks like this 的功能。我还有一个小插图here
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多