Android:LayoutInflater和findViewById的困境

时间:2012-01-21 19:29:32

标签: android android-inflate

我正在尝试在循环中使用LayoutInflater,但每次实例化其中一个人时,我需要修改每个实例中至少2个TextView。我目前所拥有的内容恰当地即时发布并添加了膨胀的xml视图,就像我想要的那样,但结果是只有第一个instatiaton的资源被修改,因此它只会被多次覆盖。

            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集

我需要做些什么来确保我从我的虚增布局中获取相应的唯一textview id?

4 个答案:

答案 0 :(得分: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);

}

答案 1 :(得分:1)

我假设您TextView中有一些LinearLayout。有一点是他们不能拥有相同的id。因此,假设您有4个TextView,然后给出不同的id个,说tv1tv2等。

现在在onCreate方法中,将所有这些textView初始化为:

  

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

等等......

在你获得“剧集”的功能中试试这个:

  

`myTextView1.setText(情节[0]);

     

myTextView2.setText(情节[1]);

您不必使用任何inflater因为它已存在于活动layout文件中,该文件会自动在onCreate中完成。

答案 2 :(得分: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 );

View eTitle =inflater.inflate(R.layout.episode_list_item, listView, true);的单行结构根本就没有真正起作用。

aqs是正确的(我每天第二次向他致意),动态创建id,如果你等待很多,你的eTitle的xml布局应该没有id。

答案 3 :(得分: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);

这就是我的代码按预期工作的原因。

希望有所帮助!

约翰