我已经定义了一个带有三个选项卡的HomeActivity,每个选项卡都是一个单独的活动。我使用了android开发者网站中的示例。 http://developer.android.com/resources/tutorials/views/hello-tabwidget.html
选项卡B(第二个选项卡)UI包含一个文本和按钮(名为“搜索”)。当用户单击搜索按钮时,它应该联系REST Web服务并将结果显示为列表。
为了做到这一点,在TAB B活动中,单击按钮,我调用一个创建intent的方法并调用一个新的SearchResultsActivity(此后称为SRA)。在SRA(扩展List Activity)中,我有连接到webservice和解析返回的JSON结果的逻辑,它将结果显示为列表。我能够实现此功能。但我看到一些缺点,我的问题是:
定义新的激活(SRA)以处理搜索结果是否可以?或者在TAB B活动本身处理它会更好吗?我选择单独活动的主要原因是,SRA扩展了ListActivity,如果我想将它显示为List而TabB只是扩展Activity和不允许显示结果。那么,有更好的方法吗?
鉴于上述实现,当我从TabB(单击搜索按钮)导航到SRA时,不再看到选项卡。因为TabB正在调用新活动( Intent srchIntent = new Intent(TabB.this,SearchResultActivity.class); TabB.this.startActivity(srchIntent);),标签消失。在这种情况下,什么是最佳解决方案,以便标签显示/结果显示在标签B中?
从TabB导航到SRA时,我试图在调用StartActivity之前显示在TabB中定义的进度对话框/加载,然后取消它。但是没有出现加载图标。我试图显示对话框并取消在SRA中也是如此。但是没有出现加载。
答案 0 :(得分:0)
1)最好将TAB B扩展为ListActivity,并通过帮助程序类进行搜索。这样您就可以使代码更加独立。
2)实施1)你会没事的。
3)您应该在启动请求时显示进度对话框,并在获得结果时停止它。我会实现一个广播接收器来实现这一目标(如果你选择这样做,我可以帮助你)。
答案 1 :(得分:0)
实现这一目标有两种方法。
每当您启动另一项活动(即搜索活动)时,就在此之前将搜索活动设置为所需的标签。您可以通过获取TabActivity的实例(即扩展此类的活动)并调用new Intent().setClass(TABACTIVITY_INSTANCE,ACTIVITY YOU_WANT_TO_SET_TO_THIS_TAB)
来实现此目的。但是要使不同的意图对象成为成员类。不要做这样的事情(new Intent().setClass())
。
将no对象声明为没有你持有的Tabs,然后使用setClass
方法。
(这将解决标签消失的问题)
现在从服务器获取数据,我建议你实现AsyncTask
(在Android上有精彩的api):
private class DownloadImageTask extends AsyncTask<String, Void, String>
{
AbousUsHandler aboutHandeler;
@Override
protected void onPreExecute()
{
mProgress.setMessage("Please wait");
mProgress.show();
super.onPreExecute();
}
protected String doInBackground(String... urls)
{
/* Do you your background task i.e. getting data from server
but don't do ui related things here as this method is called in Thread
pool not on Android Ui thread.*/
return null;
}
protected void onPostExecute(String result)
{
try
{
mProgress.dismiss();
/* set Your List View Adapter here */
}
}
}
仅通过调用new DownloadImageTask().execute()
从您的UI线程执行此操作。
首先调用preExecute
,然后调用doInBackground
,当您从服务器获取数据时,将调用onPostExecute
。
我希望这能解决你的问题。