【问题标题】:Clone textview to append it to a ViewGroup克隆 textview 以将其附加到 ViewGroup
【发布时间】:2011-04-23 10:30:32
【问题描述】:

我有一个用 XML 定义的 ViewGroup,里面有一个视图,在 onCreate 时我想有一个变量。
我不想经历使用 listview+adapter 的麻烦,因为我知道自从 onCreate() 以来列表不会改变
这或多或少是我想要的代码。

TextView mytextview = myViewGroup.findViewById(R.id.mytext);

for(String test : strings){
  mytextview = mytextview.clone();
  mytextview.setText(test);
  myViewGroup.addView(mytextview);
}

但它不起作用。

【问题讨论】:

标签: java android views textview


【解决方案1】:

也许使用充气器,并将文本视图放在外部布局文件中:

View v = LayoutInflater.from(this).inflate(R.layout.textview_include, null);
viewGroup.addView(v);

【讨论】:

  • 不能使用充气机怎么办?
【解决方案2】:

使用 Mathias Lin 的代码并使用 javahead76 的提示:

LinearLayout x = (LinearLayout) findViewById(R.id.container); 

    for (int i = 0; i < 5; i++) {
        View c = LayoutInflater.from(this).inflate(R.layout.singlerow, x);  
        TextView t = ((TextView)findViewById(R.id.textView1));
        t.setId(i+10000);
        t.setText("text"+i);            
    }
    TextView b = (TextView) findViewById(10003);
    b.setText("10003");

【讨论】:

  • findViewByIdfor 循环末尾的用途是什么?该函数将 id 0View 返回到 4(在你的情况下),但你没有在任何地方使用它。
  • @Pimp Trizkit 你说得对,我忘了删除它。这是旧代码。
【解决方案3】:

如果您这样做,您很可能会为以这种方式创建的每个视图获得完全相同的 id。这意味着像 ((TextView)v).setText("some text");将在以前从同一布局膨胀的每个 TextView 上调用。你仍然可以这样做,但你应该调用 setId() 并有一些合理的方法来确保你不会连续两次获得相同的 id - 增量或通用时间等。

另外,我认为 Android 为动态创建的 id 保留了一定范围的 id。您可能会避免使用此范围内的 ID;但老实说,我不知道 id 系统是否有效,所以我在这一点上可能是错误的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2013-10-12
    • 2015-06-22
    • 1970-01-01
    • 2018-05-07
    • 2022-07-28
    • 2012-02-01
    相关资源
    最近更新 更多