克隆textview以将其附加到ViewGroup

时间:2010-10-10 11:05:45

标签: java android views textview

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

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

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

但它没有用。

3 个答案:

答案 0 :(得分:19)

也许使用inflater,并将textview放在外部布局文件中:

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

使用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");