我正在创建一个将结果存储在多个textview中的应用, 首先,我需要获取视图,它们是20个视图,名为result 1,....结果20。 我怎样才能让他们进入一系列textview。 我找到了这个方法,但它太长了
TextView [] results = {(TextView)findViewById (R.id.result1),
(TextView)findViewById (R.id.result2),(TextView)findViewById (R.id.result3),
(TextView)findViewById (R.id.result4),(TextView)findViewById (R.id.result5),
(TextView)findViewById (R.id.result6).....};
谢谢你的帮助
答案 0 :(得分:0)
如果你有一个句柄来表示包含文本视图的布局,你可以用这样的函数递归地发现它们,
void getTextViews(View view, List<TextView> textViews) {
if (view instanceof TextView) {
textviews.add((TextView)view);
else if (TextView instanceof ViewGroup) {
getTextViews((ViewGroup)view, textViews);
}
}
现在就这样称呼它,
ViewGroup topLayout = findViewById(...);
List<TextView> views = new ArrayList<TextView>();
getTextViews(topLayout, views);
TextView[] textViewArray = textViews.toArray(new TextView[0]);
这个时间要长一些,但如果你添加,删除或重命名文本视图,它的优点就是不需要更改代码。
恕我直言,不要专注于编写更少的代码,专注于编写清晰的代码。你输入的速度很少是你工作效率的限制因素。答案 1 :(得分:0)
如何开始是正确的,现在考虑将重复的代码放在一个循环中。
例如,设计一个方法,将TextView资源的数组作为输入,并使用“for”循环通过相应的id查找该视图。
private TextView[] initTextViews(int[] ids){
TextView[] collection = new TextView[ids.length];
for(int i=0; i<ids.length; i++){
TextView currentTextView = (TextView)findViewById(ids[i]);
collection[i]=currentTextView;
}
return collection;
}
然后你就这样使用它:
// Your TextViews ids
int[] ids={R.id.result1, R.id.result2, R.id.result3};
// The resulting array
TextView[] textViews=initTextViews(ids);