FindViewById 在一行中多次

FindViewById Multiple Times on a Single Line

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

这个对我的问题有效吗?

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

您尝试过使用 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'

并在您的 activity

onCreate 中调用绑定方法
ButterKnife.bind(this);

唯一的建议是使用模板 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));

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

或者您可以使用parent.findViewById查找指定视图的子视图。

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

  • 这一行 TextView title, darkThemeTitle = (TextView) findViewById(R.id.title); 将显示 变量 'title' 可能尚未初始化 。所以 title 从未在代码中初始化

  • 并且 findViewById(R.id.tab_layout); 将 return 查看 在您的代码中。它永远不会 return 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]);
}

我不鼓励你这样做,因为这对其他程序员来说更难阅读,而且不会为你节省很多打字时间。使用:

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