4

ループで LayoutInflater を使用しようとしていますが、これらの人のいずれかがインスタンス化されるたびに、各インスタンス化内にある少なくとも 2 つの TextView を変更する必要があります。現在私が現在持っているものは適切にインスタンス化され、膨張した xml ビューが必要に応じて追加されますが、その結果、最初のインスタンスのリソースのみが変更されるため、何度も上書きされます。

            LayoutInflater inflater;
            TextView eTitle;

            for(String[] episode : episodes) {

                //Log.d("Episodes", episode[0] + " / " + episode[2]);
                inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                inflater.inflate(R.layout.episode_list_item, listView);
                eTitle = (TextView) findViewById(R.id.episode_list_item_title);

                eTitle.setText(episode[2]);
            }

私のリストの出力例:

  • 04 - エピソード 04
  • エピソードのタイトル
  • エピソードのタイトル
  • エピソードのタイトル

次のようになります。

  • 01 - エピソード 01
  • 02 - エピソード 02
  • 03 - エピソード 03
  • 04 - エピソード 04

膨張したレイアウトから対応する一意のテキストビューIDを確実に取得するにはどうすればよいですか?

4

4 に答える 4

8

代わりに ListView を使用しないのはなぜですか?

 LayoutInflater inflater = inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

for(String[] episode : episodes) {
    View view = inflater.inflate(R.layout.episode_list_item, null);
    mTitle = (TextView) view.findViewById(R.id.episode_list_item_title);
    mTitle.setText(episode[2]);

listView.addView(view);

}
于 2012-01-21T21:30:16.823 に答える
1

にいくつかの があると仮定していTextViewますLinearLayoutid1 つのポイントは、同じsを持つことはできないということです。したがって、 4 があると仮定TextViewし、それぞれ異なるids を指定します。たとえばtv1tv2などです。

onCreateメソッドで、これらすべての textViews を次のように初期化します。

myTextView1= (TextView)findViewByid(R.id.tv1);

などなど...

「エピソード」を取得する関数で、これを試してください:

`myTextView1.setText(エピソード[0]);

myTextView2.setText(エピソード[1]);

で自動的に行われるinflaterアクティビティ ファイルに既に存在するため、何も使用する必要はありません。layoutonCreate

于 2012-01-21T20:23:55.657 に答える
0

膨張しているビューをキャプチャするのを忘れて、そのビュー内で新しいコントロールを探していると思います。

元のコードは次のとおりです。

inflater.inflate(R.layout.episode_list_item, listView);
eTitle = (TextView) findViewById(R.id.episode_list_item_title);

あなたのコードは次のようになるはずです(膨張したビューに含まれるビューを見つける):

View new_view = inflater.inflate(R.layout.episode_list_item, listView, false);
eTitle = (TextView) new_view.findViewById(R.id.episode_list_item_title);
eTitle.setText(episode[2]);
listView.addView(new_view);

これにより、コードが期待どおりに機能しました。

それが役立つことを願っています!

ジョン

于 2013-05-06T19:40:06.103 に答える
0

行を変更する

inflater.inflate(R.layout.episode_list_item, listView);
eTitle = (TextView) findViewById(R.id.episode_list_item_title);

行に:

eTitle =inflater.inflate(R.layout.episode_list_item, listView, false);
listView.addChild(eTitle );

Simply neverの 1 行の構成はView eTitle =inflater.inflate(R.layout.episode_list_item, listView, true);、実際には実際には機能しません。

そして、aqs は正しいです (1 日に 2 回、私は彼に賛辞を送っています)、id を動的に作成します。eTitle の xml レイアウトは、それらの多くを待つ場合、id を解放する必要があります。

于 2012-01-21T22:05:02.963 に答える