4

我正在尝试在循环中使用 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

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

我假设你TextViewLinearLayout. 一点是他们不能有相同id的s。所以假设你有 4 TextView,然后给每个不同id的 s,比如说tv1tv2等等。

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

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

等等等等……

在获得“剧集”的函数中,试试这个:

`myTextView1.setText(episodes[0]);

myTextView2.setText(episodes[1]);

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

于 2012-01-21T20:23:55.657 回答
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。

于 2012-01-21T22:05:02.963 回答
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 回答