Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在活动中实现此接口时必须实现该接口_Java_Android_Android Fragments - Fatal编程技术网

Java 在活动中实现此接口时必须实现该接口

Java 在活动中实现此接口时必须实现该接口,java,android,android-fragments,Java,Android,Android Fragments,我有一个主要的活动。在主活动的Oncreat{}中,我创建了一个名为“ChannelList”的片段 代码: 命令ChannelList与名为“ChannelActivity”的活动进行通信。我在ChannelList中使用名为“OnListItemSelectedListener”的接口及其方法“onListItemSelected” public class ChannelList extends ListFragment { private OnListItemSelectedListen

我有一个主要的活动。在主活动的Oncreat{}中,我创建了一个名为“ChannelList”的片段 代码:

命令ChannelList与名为“ChannelActivity”的活动进行通信。我在ChannelList中使用名为“OnListItemSelectedListener”的接口及其方法“onListItemSelected”

public class ChannelList extends ListFragment {
private OnListItemSelectedListener mCallback;
public interface OnListItemSelectedListener {
    public void onListItemSelected(ListView l, int position);
}
片段ChannelList在其onAttach()生命周期方法中捕获接口实现

     @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception.
        try {
            mCallback = (OnListItemSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnListItemSelectedListener");
        }
    }
当用户单击列表项时,将调用片段中的以下方法。片段使用回调接口将事件传递给父活动

    public void onListItemClick(ListView l, View v, int position, long id) {
    mCallback.onListItemSelected(l, mChannelAdapter.getItem(position)
            .getID());
}
在ChannelActivity上,我实现了这个接口及其方法来调用名为“ChannelDetailFragment”的片段

我在以下网站上关注此图坦卡蒙: 不幸的是,我从OnAttach{}抛出了一个错误。我检查了我的代码很多次,但没有发现哪里是错误的。救救我

10-02 14:07:40.156: E/AndroidRuntime(980): FATAL EXCEPTION: main
10-02 14:07:40.156: E/AndroidRuntime(980): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.channellistfragment/com.example.channellistfragment.MainActivity}: java.lang.ClassCastException: com.example.channellistfragment.MainActivity@a68d01b8 must implement OnListItemSelectedListener
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.ActivityThread.access$600(ActivityThread.java:130)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.os.Looper.loop(Looper.java:137)
10-02 14:07:40.156: E/AndroidRuntime(980):  at   android.app.ActivityThread.main(ActivityThread.java:4745)
10-02 14:07:40.156: E/AndroidRuntime(980):  at java.lang.reflect.Method.invokeNative(Native Method)
10-02 14:07:40.156: E/AndroidRuntime(980):  at java.lang.reflect.Method.invoke(Method.java:511)
10-02 14:07:40.156: E/AndroidRuntime(980):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-02 14:07:40.156: E/AndroidRuntime(980):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-02 14:07:40.156: E/AndroidRuntime(980):  at dalvik.system.NativeStart.main(Native Method)
10-02 14:07:40.156: E/AndroidRuntime(980): Caused by: java.lang.ClassCastException: com.example.channellistfragment.MainActivity@a68d01b8 must implement OnListItemSelectedListener
10-02 14:07:40.156: E/AndroidRuntime(980):  at com.example.channellistfragment.ChannelList.onAttach(ChannelList.java:79)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:867)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.Activity.performStart(Activity.java:5018)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032)
10-02 14:07:40.156: E/AndroidRuntime(980):  ... 11 more

您有2个活动,并将ChannelList片段添加到这两个活动中。第一个(主活动)没有实现您的回调接口,您将获得ClassCast验证。

谢谢!我理解它不起作用的原因谢谢!我删除了channelactivity并在mainactivity上实现了接口。所以它工作得很好!我的目的仍然是使用channelactivity实现接口,但不在MainActivity上实现接口没有意义。您将片段添加到mainactivity,因此它应该以某种方式实现OnListItemSelectedListener。为什么你需要第二次活动?
public class ChannelActivity extends FragmentActivity implements
    ChannelList.OnListItemSelectedListener {

private FragmentManager fm;
private Fragment mChannelDetailFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.channel_activity);
    fm = getSupportFragmentManager();

    Fragment mChannelListFragment = fm
            .findFragmentByTag(ChannelList.TAG);
    if (mChannelListFragment == null) {
        addFragment(new ChannelList(), false,
                ChannelList.TAG);
    }

}

@Override
public void onListItemSelected(ListView l, int position) {
    Bundle args = new Bundle();
    args.putInt(ChannelDetailFragment.CHANNEL_ID, position);

    mChannelDetailFragment = fm
            .findFragmentByTag(ChannelDetailFragment.TAG);
    if (mChannelDetailFragment == null) {
        mChannelDetailFragment = new ChannelDetailFragment();
    }
    mChannelDetailFragment.setArguments(args);
    addFragment(mChannelDetailFragment, true, ChannelDetailFragment.TAG);
}
10-02 14:07:40.156: E/AndroidRuntime(980): FATAL EXCEPTION: main
10-02 14:07:40.156: E/AndroidRuntime(980): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.channellistfragment/com.example.channellistfragment.MainActivity}: java.lang.ClassCastException: com.example.channellistfragment.MainActivity@a68d01b8 must implement OnListItemSelectedListener
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.ActivityThread.access$600(ActivityThread.java:130)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.os.Looper.loop(Looper.java:137)
10-02 14:07:40.156: E/AndroidRuntime(980):  at   android.app.ActivityThread.main(ActivityThread.java:4745)
10-02 14:07:40.156: E/AndroidRuntime(980):  at java.lang.reflect.Method.invokeNative(Native Method)
10-02 14:07:40.156: E/AndroidRuntime(980):  at java.lang.reflect.Method.invoke(Method.java:511)
10-02 14:07:40.156: E/AndroidRuntime(980):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-02 14:07:40.156: E/AndroidRuntime(980):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-02 14:07:40.156: E/AndroidRuntime(980):  at dalvik.system.NativeStart.main(Native Method)
10-02 14:07:40.156: E/AndroidRuntime(980): Caused by: java.lang.ClassCastException: com.example.channellistfragment.MainActivity@a68d01b8 must implement OnListItemSelectedListener
10-02 14:07:40.156: E/AndroidRuntime(980):  at com.example.channellistfragment.ChannelList.onAttach(ChannelList.java:79)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:867)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.Activity.performStart(Activity.java:5018)
10-02 14:07:40.156: E/AndroidRuntime(980):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032)
10-02 14:07:40.156: E/AndroidRuntime(980):  ... 11 more