无法以编程方式设置EditText ID

时间:2016-07-08 01:18:43

标签: java android android-edittext

我正在创建一个动态数量的editTexts,并希望最终拉出每个的ID以在editText上调用.getText()。

但是,我注意到以编程方式设置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);
}

如果我知道标签而不是ID,我如何获得每个editText的值?另外,.setTag()方法的目的是什么(它与.setID()有什么关系?)

3 个答案:

答案 0 :(得分:2)

在res / values / id.xml中创建资源文件(id.xml)

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

然后设置,

 editText.setId(R.id.edittext_hello);

答案 1 :(得分:0)

我不建议使用标记来从您的层次结构中获取视图,但如果您必须这样,那么SO帖子将介绍如何执行此操作:https://stackoverflow.com/a/16262479/6526330

当您需要在视图中缓存某些数据时,应该使用标记,以便稍后再次获取视图时抓取(是的,我知道非常通用)。例如,如果您在列表视图中使用持有者,或者您在屏幕上有很多视图,并且希望每个视图都有一个全局点击监听器与侦听器。我从the answers on this post中偷走了这两个例子,这些例子在描述用例方面比我做得更好。

答案 2 :(得分:0)

findViewById()findViewWithTag()是用于获取对从XML扩充的View的引用的方法。

如果您正在创建View,那么您已经拥有它们,那么就不需要使用这些方法了。保留对某处View的引用。