0

アクティビティにがFragmentTransactionあり、AsyncTask を の後にフラグメントで実行したいfragmentTransaction.commit()AsyncTask後に実行するにはどうすればよいcommitですか? AsyncTaskコミットの前後に 2 回実行されるためです。誰でも助けることができますか?

*注: FragmentTransaction を使用して送信したアクティビティの文字列で実行される AsyncTask


アクティビティ :

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menudisplay);
        Bundle extras = getIntent().getExtras();
        language = extras.getString("language");
        lang_id = extras.getInt("id");

        MyListFragment mylist = new MyListFragment();


        FragmentTransaction fragmentTrans = getFragmentManager()
                .beginTransaction();

        mylist.language = language;
        fragmentTrans.add(mylist, "language");

        fragmentTrans.commit();
        Log.d("tes", "data loaded");

    }

フラグメント :

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_menulist_overview, container,
                false);
            System.out.println("tes="+language+" sama ini = "+asdf);
        onActivityCreated(inflater, container, savedInstanceState);


        return view;

    }
    public void onActivityCreated(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        run();

    }

    public void run(){
        Log.d("Test","How many called?");
        if(language != null)
        new loadcat().execute();

    }
4

2 に答える 2

1

あなたが書いたメモを取得できませんでしたが、必要に応じて実行されたフラグメント内にパブリック メソッドを作成し、コード内の目的のポイントから呼び出すことで、トランザクションを簡単にしたAsyncTask後に実行できます。.commit()AsyncTaskActivity

たとえば、このメソッドを の中に作成すると、次のようになりFragmentます。

public void executeAsyncTask(String language, int lang_id)
{
     ...
     asyncTask.execute(language, lang_id);
}

アクティビティでは、次のメソッドを呼び出すことができます。

...
fragmentTrans.commit();
Log.d("tes", "data loaded");
mylist.executeAsyncTask(language,lang_id);
于 2013-03-10T21:41:59.887 に答える
0

私の知る限り、commit実行コールバックは公開されていません(または存在しない可能性さえあります)。

問題は、いつ実行したいのAsyncTaskですか?

フラグメントの作成時に一度実行する場合は、次のように明示的なonActivityCreated()呼び出しを削除する必要があることを除いて、コードは正しいです。onCreateView

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.fragment_menulist_overview, container,
            false);
        System.out.println("tes="+language+" sama ini = "+asdf);
    onActivityCreated(inflater, container, savedInstanceState); // REMOVE THIS LINE


    return view;

}

onActivityCreatedコールバックです。明示的に呼び出すと、タスクが二重に実行されます

于 2013-03-10T23:30:43.437 に答える