0

FragmentTransaction在活动中有一个,我希望 AsyncTask 在之后的片段中运行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();

    }
4

2 回答 2

1

我没有收到您写的注释,但是您可以通过AsyncTask.commit()执行您想要的片段内创建一个公共方法并从代码中的所需点AsyncTask调用它来简单地运行事务。Activity

因此,例如,如果您在以下内容中创建此方法Fragment

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

而在Activity中,你可以调用这个方法:

...
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 回答