-1

我正在制作一个将结果存储在多个文本视图中的应用程序,首先,我需要获取视图,它们是名为结果 1 的 20 个视图,....结果 20。我怎样才能将它们放入文本视图数组。我找到了这个方法,但是太长了

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).....};

谢谢你的帮助

4

2 回答 2

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]);

这有点长,但它的优点是如果您添加、删除或重命名文本视图,则无需更改代码。

恕我直言,不要专注于编写更少的代码,而是专注于编写清晰的代码。你打字的速度很少是你工作效率的限制因素。

于 2012-07-25T15:31:42.420 回答
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);
于 2012-07-25T15:35:38.200 回答