我正在使用for循环添加TextViews programmatic并使用setId(Int int)为该特定Textview设置唯一ID。 但是现在我想在id的基础上搜索textView。 我该如何搜索?
erorr发生'app意外停止......'这是我的代码。
public class Idtest extends Activity {
TextView tv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout ll=new LinearLayout(this);
tv=new TextView(this);
tv.setText("Hello");
ll.addView(tv);
tv=new TextView(this);
tv=(TextView)ll.getChildAt(1);
setContentView(tv);
}
}
答案 0 :(得分:2)
tv
显然是null
(LinearLayout
只有一个孩子,它位于索引0
),所以你基本上都在调用{{1}这会导致异常。我不清楚你要做什么(你的代码很乱)。
假设您尝试在setContentView(null)
中展示多个TextView
,这是我的建议:
LinearLayout
如果您以后需要其中一个public class Idtest extends Activity {
LinearLayout mainLayout;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainLayout = new LinearLayout(this);
setContentView(mainLayout);
for (int i=0; i < 10; i++) {
TextView tv = new TextView(this);
tv.setText("Hello " + i);
mainLayout.addView(tv);
}
}
}
,请执行:
TextView
另外,请注意从代码创建布局是邪恶的。如果你可以避免它,请做。例如,如果TextView tvX = mainLayout.getChildAt(X); // where X is between 0 and 9
的数量是动态的,那么从代码创建它们是完全正常的(尽管你可以给它们充气)。但是,也不建议从代码中创建TextView
。你应该在XML中拥有它。如果您也可以在XML中使用LinearLayout
,那就更好了。
答案 1 :(得分:1)
还有另一种选择......我们有setTag()
和getTag()
方法。虽然添加textview为它提供标记,但只要你想进行搜索,就使用getTag()。
答案 2 :(得分:1)
我想你是要将TextView控件添加到某个ViewGroup(例如LInearLayout)?
您可以使用getChildCount()/ getChildAt(index)遍历ViewGroup子视图,并将子视图ID与您要搜索的视图ID进行比较。