1

これは、ここでの基本的な Java の質問だと思います。

これは Android プロジェクト用です。私はこのセットアップを持っています:

 public class MyFragmentActivity extends FragmentActivity implements
    ActionBar.TabListener {

     // lots of code edited out


    public static class RateFragment extends Fragment {

             // lots of code edited out

         class InsertTask extends AsyncTask<String, String, Void> {

               protected void onPostExecute(Void v) { {

                // I need to access ReviewTask here
                new ReviewTask().execute();

               } 

         }


    }

    public static class ReviewFragment extendsListFragment {

              class ReviewTask extends AsyncTask<String, String, Void> {

                  // code

              }


    }


}

私は本当に基本的な Java の質問をしています。私はそれがAndroidで最善の方法ではないことを知っています.

私が何をしているのかを知る必要がある場合: (これがわかりにくい場合、この情報は優先度が低く、状況によっては優先度が低くなります) RateFragment でボタンが押されたときに InsertTask を呼び出し、MySQL データベースにデータを挿入します。上記のコードでやりたいことは次のとおりです。InsertTask では、最後に、他の内部クラスで ReviewTask を呼び出します。これにより、リストビュー (他のタブにあります) が更新されます。

InsertTask から ReviewTask にアクセスできますか?

4

2 に答える 2

4

私はあなたがそれを行うことができるとは思わない. 試してみました。ただし、できることは次のとおりです... InsertTaskのpostExecute()メソッドが呼び出すメソッドをフラグメント内に配置します。このフラグメント メソッドでは、新しい ReviewTask を作成してタスクを起動できます。このようにして、内部クラスは、呼び出し間のデリゲートとして機能する親クラスと対話するだけです。

編集:

public class MyFragment extends FragmentActivity {

        private void delegateMethod(Object result) {
            TaskB b = new TaskB();
            b.doanotherthing(result);
        }

        class TaskA {
            ...
            public void onPostExecute() {
                Object result = new Object();
                delegateMethod(result);
            }
        }

        class TaskB {
            public void doanotherthing(Object o) {
                ...
            }
        }
    }
于 2012-07-26T02:49:03.247 に答える
1

RateFragment の宣言を非静的に変更する場合は、呼び出すことができます

class InsertTask extends AsyncTask<String, String, Void> {

    protected void onPostExecute(Void v) { {

        MyFragmentActivity.this.(new RateFragment()).(new ReviewTask()).execute();

    } 

}

InsertTask は MyFragmentActivity のインスタンス内にあるため、キーワードthisは引き続き使用できthisますMyFragmentActivity.this。これはインスタンス名ではなく、クラス名であることに注意してください。

于 2012-07-26T02:46:18.627 に答える