3

このループを設定すると正常に動作しますが、各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++;

        }
4

2 に答える 2

0

Viewドキュメントによると、

識別子は、このビューの階層内で一意である必要はありません。識別子は正の数でなければなりません。

この場合、同等の ID を持ついくつかのビューが存在する可能性があります。階層内のいくつかのビューを検索する場合はsetTag、いくつかのキー オブジェクトを使用して を呼び出すと便利な場合があります。

于 2012-05-25T02:04:50.067 に答える
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() を再度呼び出すことなく、いつでもそれぞれを参照できます。このメソッドはかなりコストがかかるため、過度に呼び出さないようにする必要があります。

于 2012-05-25T02:22:56.187 に答える