Android - 标签导航<while spanning =“”a =“”new =“”activity =“”> </while>

时间:2010-07-29 20:07:19

标签: android android-tabhost

我已经定义了一个带有三个选项卡的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中也是如此。但是没有出现加载。

2 个答案:

答案 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

我希望这能解决你的问题。