我想调用位于片段中的内部异步任务。我想从包含异步任务的父片段中调用这个异步任务。这个父片段包括一个带有多个片段的查看器。我知道我必须使用一个接口,并尝试了一些东西,但它不起作用。
接口
public interface OnFragmentButtonListener {
void 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)发布于 2014-11-12 22:26:37
看起来,您试图在父活动上调用onMyButtonClicked,而不是调用子FragmentQueue实例。在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“。
https://stackoverflow.com/questions/26897445
复制相似问题