我想在屏幕上显示搜索结果,我是这样实现的。
用户在搜索表单中填写“搜索字段”和“搜索位置”,我将值设置到 bean 中,该 bean 是静态的,因此我可以从任何地方访问它。
然后我使用
开始搜索结果屏幕 IntentIntent mainIntent = new Intent(SearchVenueResults.this, SearchResults.class);
startActivity(mainIntent);
在“SearchResults” Activity 的“oncreate”方法中,我代表静态 bean 加载数据,这些值从搜索表单中填充,然后显示数据。
@Override
public void onCreate(Bundle savedInstanceState) {
loadDataAndSetupUI();
super.onCreate(savedInstanceState);
}
我的问题是它是正确的使用方法还是在 Android 中有另一种更好的方法?
感谢任何快速的想法或快速的代码。
最佳答案
一般来说,结果屏幕 Activity 的 onCreate
处理程序绝对是执行此操作的好地方。但是,阅读您问题的字里行间,我注意到至少有两件事可能会导致问题:
首先,使用静态对象将值从一个 Activity 传输到另一个 Activity 绝对是错误的做法。这是因为一方面,Android 中已经有一个定义明确的机制用于在上下文之间交换数据,这是通过 Bundles 实现的。和 Intents .因此,要告诉您的结果 Activity 您的用户正在搜索的内容,请执行以下操作:
Intent mainIntent = new Intent(SearchVenueResults.this, SearchResults.class);
mainIntent.putExtra("search_query", getValueFromSearchBox());
startActivity(mainIntent);
在您的 SearchResults Activity 中,在 onCreate 中执行此操作:
public void onCreate(Bundle savedInstanceState) {
String searchQuery = getIntent().getExtras().getStringExtra("search_query");
loadDataAndSetupUI(searchQuery);
super.onCreate(savedInstanceState);
}
此外,Android 的行为在静态变量的生命周期方面几乎不可预测。我多次注意到,在 Activity 类中维护静态变量不能保证在启动新 Activity 时该变量仍然有效,因此您永远不应依赖静态作为类之间交换数据的方式.
其次,您绝对不想实现 loadDataAndSetupUI
以同步运行。这样做会锁定您的用户界面,直到搜索终止,Android 甚至可能决定终止您的应用程序。使用 AsyncTask代替后台作业。
关于Android显示搜索结果的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1912478/