Android 使片段内的AsyncTask在FragmentTransaction.commit()之后运行

Android 使片段内的AsyncTask在FragmentTransaction.commit()之后运行,android,android-asynctask,android-fragments,Android,Android Asynctask,Android Fragments,我在活动中有一个FragmentTransaction,我希望异步任务在FragmentTransaction.commit()之后的片段中运行。如何使AsyncTask在commit之后运行?因为AsyncTask在提交之前和之后运行2次。有人能帮忙吗 *注意:AsyncTask使用我使用FragmentTransaction发送的活动字符串运行 活动: protected void onCreate(Bundle savedInstanceState) { super.on

我在活动中有一个
FragmentTransaction
,我希望异步任务在
FragmentTransaction.commit()之后的片段中运行。如何使
AsyncTask
commit
之后运行?因为
AsyncTask
在提交之前和之后运行2次。有人能帮忙吗

*注意:AsyncTask使用我使用FragmentTransaction发送的活动字符串运行


活动:

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();

    }

我没有收到你写的便条,但是你可以在
完成后运行
异步任务
。commit()
通过在执行你想要的
异步任务
的片段内部创建一个公共方法,并在代码中想要的点从
活动
调用它,就可以很简单地完成事务

例如,如果您将此方法包装在
片段中

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);

据我所知,
commit
executioncallback没有公开(甚至可能不存在)

所以问题是-您希望何时执行
异步任务

如果您希望在片段创建时执行一次,那么您的代码是正确的,除非您应该从
onCreateView
中删除显式的
onActivityCreated()
调用,如下所示:

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
是一个回调。显式调用它会导致任务重复执行

请重新表述您的问题我不明白您在问什么。您能否发布一个给您带来麻烦的特定代码块。@MikeD done。你明白我什么意思吗?抱歉,我的英语不好。错误:无法启动activity ComponentInfo{----------}:java.lang.NullPointerException。这意味着什么?这意味着您试图访问没有对象或值内容的内容,但它保持null。刚才,我没有使用活动中的字符串。我在片段中创建了一个值为的新字符串,并且仍然从activity调用方法“executeAsyncTask()”。仍然错误:(如果我从oncreateview调用asynctask,它可以工作。但这不是我想要的。我需要使用在活动开始时指定的参数。您能提供帮助吗?或者您需要查看片段的完整代码吗?Lang_id在片段中不使用,它只是用于跟踪我的代码。|哦,抱歉,这只是尝试和错误。我以前实际上没有使用过它