在android中如何使用setId?

在android中如何使用setId?,android,textview,Android,Textview,我设置了这个循环,它工作得很好,但我希望能够单独更改每个textView,因此我需要设置textView.setId(您在此处输入的内容);有人能给我解释一下如何设置id以及你在括号里放了什么吗?谢谢 while (counter < 5) { view = LayoutInflater.from(getBaseContext()).inflate(R.layout.newplayerlayout, null); parent.addView

我设置了这个循环,它工作得很好,但我希望能够单独更改每个textView,因此我需要设置textView.setId(您在此处输入的内容);有人能给我解释一下如何设置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++;

        }
while(计数器<5){
view=LayoutInflater.from(getBaseContext()).flate(R.layout.newplayerlayout,null);
parent.addView(视图);
TextView TextView=(TextView)view.findViewById(R.id.textView2);
textView.setText(“播放器”+计数器);
textView.setId(计数器);
计数器++;
}
根据文件

标识符在此视图的层次结构中不必是唯一的。标识符应为正数

在这种情况下,可能会有一些具有等效id的视图。如果您想在层次结构中搜索某个视图,可以使用一些关键对象调用
setTag

我设置了这个循环,它工作得很好,但我希望能够单独更改每个文本视图

所以我需要设置textView.setId(你放在这里的是什么)

不,你没有,有更好的方法来实现你想做的事情

一个例子可能是这样的:

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");
LayoutInflator mInflator//您正在用代码创建其中的5个,您不需要这样做。
mInflator=LayoutInflater.from(this)//您的活动是一个上下文。所以你把它传过来
//调用getBaseContext()。你应该尽量避免。
TextView[]mTxts=新的TextView[5](此);
while(计数器<5){
mTxts[计数器]=(文本视图)最小充气(R.layout.newplayerlayout,null);
parent.addView(视图);
//TextView TextView=(TextView)view.findViewById(R.id.textView2);
//你不再需要这个了。
mTxts[counter].setText(“播放器”+计数器);
//textView.setId(计数器);
//我也不需要这个。
计数器++;
}
//现在已加载数组,您可以如下设置文本:
mTxts[0].setText(“李子”);
mTxts[2].setText(“葡萄”);
注意,我没有编译这个,但是应该很接近。如果“this”上出现错误,请将其更改为带有活动类名称的“YourActivity.this”


有几个好处,通过保持LayoutInflater引用,您可以节省创建4个以上的引用。膨胀视图对象后,无需通过Id找到它,您已经获得了它。如果您愿意,您可以将其作为文本视图直接从充气机中释放出来。通过将它们保留在一个数组中,您可以始终引用它们中的每一个,而无需再次调用findViewById(),此方法非常昂贵,您应该尽量避免过度调用它

所以如果我使用textView.setId(计数器);以后如何调用该id,是否使用view.findviewbyd(1);?如果我试图访问我创建的第一个文本视图?是的,但请记住,
findViewById()
将返回第一个
视图及其找到的给定id。仅仅因为ID不必是唯一的,并不意味着你不应该意识到它(否则你以后会遇到麻烦)。在静态XML文件中定义这些ID可能是明智的。太棒了!这很有效,谢谢!我不知道他们的文本视图会有多少,直到它被输入到应用程序中,所以在xml中预先定义它们是行不通的。你真的应该解决这个问题,而不需要所有对findViewById()的调用。我在TextView[]上收到一个错误,它说:
令牌上的语法错误“]”,此标记后应为AssignmentOperator-赋值的左侧必须是变量