4

3 つのタブを持つ HomeActivity を定義しました。各タブは個別のアクティビティです。Android 開発者サイトの例を使用しました。http://developer.android.com/resources/tutorials/views/hello-tabwidget.html

タブ B (2 番目のタブ) の UI には、テキストとボタン (検索という名前) が含まれています。ユーザーが検索ボタンをクリックすると、REST Web サービスに接続し、結果をリストとして表示する必要があります。

これを行うために、TAB B アクティビティ内でボタンをクリックすると、インテントを作成し、新しい SearchResultsActivity (以降 SRA と呼ぶ) を呼び出すメソッドを呼び出します。SRA 内 (リスト アクティビティを拡張) には、 Webサービスに接続し、返されたJSON結果を解析して結果をリストとして表示するためのロジック.私はこの機能を達成することができます.

  • 検索結果を処理する新しいアクティビティ (SRA) を定義してもよろしいですか? または、TAB B アクティビティ自体で処理する方がよいでしょうか?別のアクティビティを選択した主な理由は、SRA が ListActivity を拡張することです。これは、リストとして表示したい場合に必要であり、TabB はアクティビティを拡張するだけであり、結果を表示することはできません。これを行うためのより良い方法はありますか?

  • 上記の実装を考えると、TabB (検索ボタンをクリック) から SRA に移動すると、タブが表示されなくなります。 this.startActivity(srchIntent);)、タブが消えます。この場合、タブが表示されたり、タブ B に結果が表示されるようにするための最良の解決策は何ですか?

  • TabB から SRA に移動しているときに、StartActivity を呼び出す前に TabB で定義された進行状況ダイアログ/読み込みを表示しようとしていますが、読み込みアイコンは表示されません。ダイアログを表示して SRA でもキャンセルしようとしましたが、ローディングは表示されません。

4

2 に答える 2

0

やあバラ、私が言わなければならないことは:

1) TAB B を ListActivity として拡張し、検索をヘルパー クラスで行うのが最善です。このようにして、コードの独立性を高めます。

2) 1) を実装すればOKです。

3) リクエストの開始時に進行状況ダイアログを表示し、結果が得られたら停止する必要があります。私はそれを達成するために放送受信機を実装します (あなたがそれを行うことを選択した場合、私はあなたを助けることができます)。

于 2011-05-04T15:07:29.623 に答える
0

この目標を達成するには、2 つのアプローチがあります。

別のアクティビティ (つまり、検索アクティビティ) を開始するときはいつでも、その直前に検索アクティビティを目的のタブに設定します。これは、TabActivity (つまり、このクラスを拡張するアクティビティ) のインスタンスを取得して を呼び出すことで実現できますnew Intent().setClass(TABACTIVITY_INSTANCE,ACTIVITY YOU_WANT_TO_SET_TO_THIS_TAB)。しかし、意図の異なるオブジェクトをメンバークラスとして作成する..このようなことをしないでください(new Intent().setClass())

インテント オブジェクトの数を保持しているタブの数として宣言し、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 */
        }
    }
}

を呼び出すことによってのみ、UI スレッドからこれを実行しますnew DownloadImageTask().execute()

最初preExecuteに が呼び出され、次にdoInBackgroundサーバーからデータを取得するときにonPostExecuteが呼び出されます。

これで問題が解決することを願っています。

于 2011-05-09T07:58:16.167 に答える