FindViewById在单行上多次

时间:2017-11-07 23:58:07

标签: java android textview findviewbyid

这不是问题,而是更多的效率问题。我的Android应用程序的XML布局中有多个TextView(其中2个)。我的问题是,我可以在一行中选择多个TextView,findViewById多个TextView吗?

对我的问题有效吗?

TextView title, darkThemeTitle = findViewById(R.id.title); findViewById(R.id.darkThemeTitle);

4 个答案:

答案 0 :(得分:1)

唯一的建议是使用模板ID来查找视图:

max_id

这将查找当前活动的所有视图。

或者您可以使用TextView[] themedViews = new int[NUMBER_OF_THEMES]; for (int k = 0; k < NUMBER_OF_THEMES; k++) themedViews[k] = findViewById(context.getResources().getIdentifier("some_prefix" + String.valueOf(k), "id", packageName)); 查找指定视图的子视图。

答案 1 :(得分:1)

在代码中使用TextView title, darkThemeTitle = findViewById(R.id.title); findViewById(R.id.darkThemeTitle);时。

  • 此行TextView title, darkThemeTitle = (TextView) findViewById(R.id.title);会显示变量&#39;标题&#39;可能尚未初始化。在代码中title 从未初始化

  • findViewById(R.id.tab_layout);会在您的代码中返回查看。它永远不会在您的代码中返回darkThemeTitle

你可以这样做。

 TextView title = (TextView) findViewById(R.id.title); TextView darkThemeTitle = (TextView) findViewById(R.id.darkThemeTitle);

另一种方式

TextView title = null, darkThemeTitle = null;

TextView[] textViews = {title, darkThemeTitle};
Integer[] ids = {R.id.title, R.id.darkThemeTitle};

for (int i = 0; i < textViews.length; i++) {
    textViews[i] = (TextView) findViewById(ids[i]);
}

答案 2 :(得分:1)

我不鼓励你这样做,因为其他程序员阅读起来比较困难,并且不会节省你很多时间。使用:

TextView title = findViewById(R.id.title), darkThemeTitle = findViewById(R.id.darkThemeTitle);

答案 3 :(得分:0)

你尝试过使用ButterKnife吗?这个库可以帮助您进行依赖注入,因此您不必担心findViewById。只需调用@BindView(view_id)以及要绑定的变量的类型和名称。

@BindView(R.id.title)
TextView title;
@BindView(R.id.darkThemeTitle)
TextView darkThemeTitle;

请记住,您需要在build.gradle文件中添加依赖项

compile 'com.jakewharton:butterknife:8.8.1'

并在您活动的onCreate中调用绑定方法

ButterKnife.bind(this);