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);
这不是问题,更多的是效率问题。我的 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 查看 在您的代码中。它永远不会 returndarkThemeTitle
在你的代码中 .
你可以这样做。
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);