我想在屏幕上显示搜索结果,我已经以这样的方式实现了。
在搜索表单中,用户填写“搜索字段”和“搜索位置”,我将值设置为bean,并且该bean是静态的,以便我可以从每个位置访问它。
然后我使用
开始搜索结果屏幕意图Intent mainIntent = new Intent(SearchVenueResults.this, SearchResults.class);
startActivity(mainIntent);
在'SearchResults'活动'oncreate'方法中我代表静态bean加载数据,这些值从搜索表单中填充,然后显示数据。
@Override
public void onCreate(Bundle savedInstanceState) {
loadDataAndSetupUI();
super.onCreate(savedInstanceState);
}
我的问题是使用它的正确方法还是在Android中有另一种更好的方法?
任何快速创意或快速代码都会受到赞赏。
答案 0 :(得分:2)
通常,结果屏幕活动的onCreate
处理程序绝对是一个很好的做法。但是,在你的问题之间进行阅读,我发现至少有两件事可能会引起问题:
首先,使用静态对象将值从一个活动传输到另一个活动绝对是错误的方法。这是因为在Android中已经有一个定义明确的机制,用于在上下文之间交换数据,这是通过Bundles和Intents进行的。因此,要告诉您的结果活动您的用户正在搜索的内容,请执行以下操作:
Intent mainIntent = new Intent(SearchVenueResults.this, SearchResults.class);
mainIntent.putExtra("search_query", getValueFromSearchBox());
startActivity(mainIntent);
在SearchResults活动中,请在onCreate中执行此操作:
public void onCreate(Bundle savedInstanceState) {
String searchQuery = getIntent().getExtras().getStringExtra("search_query");
loadDataAndSetupUI(searchQuery);
super.onCreate(savedInstanceState);
}
此外,Android在静态变量的生命周期方面表现得非常不可预测。我多次注意到在活动类中维护静态变量不保证在启动新活动时此变量仍然有效,因此您不应该依赖静态作为在类之间交换数据的方法
其次,您绝对不希望实现loadDataAndSetupUI
同步运行。这样做会锁定您的用户界面,直到搜索结束,Android甚至可能会决定终止您的应用。请改用后台作业AsyncTask。