Java 从父片段调用内部异步任务

Java 从父片段调用内部异步任务,java,android,android-fragments,interface,android-asynctask,Java,Android,Android Fragments,Interface,Android Asynctask,我想调用位于片段中的内部asynctask。我想从用asynctask托管此片段的父片段调用asynctask。此父片段包括一个具有多个片段的viewpager。 我知道我必须使用一个界面,并尝试了一些东西,但它不工作 接口 碎片 父片段 错误 看起来您正试图在父活动而不是子FragmentQueue实例上调用onMyButtonClicked。在onClick方法中,需要获取对FragmentQueue实例的引用,然后调用onMyButtonClicked。大概是这样的: refresh.se

我想调用位于片段中的内部asynctask。我想从用asynctask托管此片段的父片段调用asynctask。此父片段包括一个具有多个片段的viewpager。 我知道我必须使用一个界面,并尝试了一些东西,但它不工作

接口

碎片

父片段

错误


看起来您正试图在父活动而不是子FragmentQueue实例上调用onMyButtonClicked。在onClick方法中,需要获取对FragmentQueue实例的引用,然后调用onMyButtonClicked。大概是这样的:

refresh.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Fragment fragment = getFragmentManager().findFragmentByTag("FragmentQueue");
        if (fragment instanceof FragmentQueue) {
            ((FragmentQueue)fragment).onMyButtonClicked();
        }
    }
});

请注意,要使其正常工作,您必须在用XML或代码构建片段时将片段标记设置为FragmentQueue。

您在活动上调用的是onMyButtonClicked,而不是子片段。您能给我一个如何修复此问题的示例吗,因为我完全卡住了。
public class FragmentQueue extends SherlockFragment implements OnFragmentButtonListener
{
...
    @Override
    public void onMyButtonClicked() {
        new LoadQueueTask().execute();
    }
}
public class ParentFragment extends SherlockFragment{
...
    refresh.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            ((OnFragmentButtonListener)getActivity()).onMyButtonClicked();
        }
    });
}
11-12 23:15:14.115: E/AndroidRuntime(31864): java.lang.ClassCastException: nl.name.projectname.ProjectName cannot be cast to nl.name.projectName.OnFragmentButtonListener
11-12 23:15:14.115: E/AndroidRuntime(31864):    at nl.name.projectname.fragments.ParentFragment$LoadInfoTask$1.onClick(ParentFragment.java:323)
11-12 23:15:14.115: E/AndroidRuntime(31864):    at android.view.View.performClick(View.java:4445)
11-12 23:15:14.115: E/AndroidRuntime(31864):    at android.view.View$PerformClick.run(View.java:18446)
11-12 23:15:14.115: E/AndroidRuntime(31864):    at android.os.Handler.handleCallback(Handler.java:733)
11-12 23:15:14.115: E/AndroidRuntime(31864):    at android.os.Handler.dispatchMessage(Handler.java:95)
11-12 23:15:14.115: E/AndroidRuntime(31864):    at android.os.Looper.loop(Looper.java:136)
11-12 23:15:14.115: E/AndroidRuntime(31864):    at android.app.ActivityThread.main(ActivityThread.java:5146)
11-12 23:15:14.115: E/AndroidRuntime(31864):    at java.lang.reflect.Method.invokeNative(Native Method)
11-12 23:15:14.115: E/AndroidRuntime(31864):    at java.lang.reflect.Method.invoke(Method.java:515)
11-12 23:15:14.115: E/AndroidRuntime(31864):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
11-12 23:15:14.115: E/AndroidRuntime(31864):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
11-12 23:15:14.115: E/AndroidRuntime(31864):    at dalvik.system.NativeStart.main(Native Method)
refresh.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Fragment fragment = getFragmentManager().findFragmentByTag("FragmentQueue");
        if (fragment instanceof FragmentQueue) {
            ((FragmentQueue)fragment).onMyButtonClicked();
        }
    }
});