获取TextViews数组

时间:2012-07-25 15:21:30

标签: android android-view

我正在创建一个将结果存储在多个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).....};

谢谢你的帮助

2 个答案:

答案 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);