我设置了这个循环,它工作正常,但我希望能够单独更改每个textView,所以我需要设置textView.setId(whateveryouputinhere);有人可以向我解释如何设置id和你在括号内的内容吗?谢谢!
while (counter < 5) {
view = LayoutInflater.from(getBaseContext()).inflate(R.layout.newplayerlayout, null);
parent.addView(view);
TextView textView = (TextView) view.findViewById(R.id.textView2);
textView.setText("Player "+counter);
textView.setId(counter);
counter++;
}
答案 0 :(得分:0)
根据View
文档,
标识符在此视图的层次结构中不必是唯一的。标识符应为正数。
在这种情况下,可能会有一些具有等效ID的视图。如果要在层次结构中搜索某些视图,调用setTag
并使用某些关键对象可能会很方便。
答案 1 :(得分:0)
我设置了这个循环,它工作正常,但我希望能够单独更改每个textView
确定
所以我需要设置textView.setId(whateveryouputinhere);
不,你没有,有更好的方法来实现你想要做的事情。
一个例子可能是这样的:
LayoutInflator mInflator; //You are creating 5 of these with your code, you don't need to.
mInflator = LayoutInflater.from(this); //Your activity is a context. So you pass it in, instead
//calling getBaseContext(). Which you should try avoid generally.
TextView[] mTxts = new TextView[5](this);
while (counter < 5) {
mTxts[counter] = (TextView)mInflator.inflate(R.layout.newplayerlayout, null);
parent.addView(view);
//TextView textView = (TextView) view.findViewById(R.id.textView2);
//You don't need this any more.
mTxts[counter].setText("Player "+counter);
//textView.setId(counter);
//don't need this either.
counter++;
}
//Now that your array is loaded you can set the text like this:
mTxts[0].setText("plums");
mTxts[2].setText("grapes");
注意,我没有编译它,但它应该是关闭的。如果您在“this”上收到错误,请将其更改为“YourActivity.this”,并附上您的活动类名称。
通过保留您保存的LayoutInflater参考创建其中4个,可以获得一些好处。在给视图对象充气之后,没有必要通过Id找到它,你已经得到了它。如果您愿意,可以将其作为TextView投射出来。通过将它们保存在一个数组中,你总是可以引用它们而不必再次调用findViewById(),这种方法相当昂贵,你应该尽量避免过度调用它。