我正在创建一个动态数量的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()有什么关系?)
答案 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
的引用。