错误:必须实现OnFragmentInteractionListener [英] ERROR: must implement OnFragmentInteractionListener

查看:1596
本文介绍了错误:必须实现OnFragmentInteractionListener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一个错误,说我必须实施OnFragmentInteractionListener,但据我所知,我正在正确实施...任何帮助将不胜感激。



主要活动

  import android.app.Activity; 
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;


公共类MainActivity扩展Activity实现NavFragment.OnFragmentInteractionListener,ContentFragment.OnFragmentInteractionListener {

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.nav,new NavFragment());
fragmentTransaction.commit();

fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.content,new ContentFragment());
fragmentTransaction.commit();
}

@Override
public void onNavFragmentInteraction(String string){
Bundle args = new Bundle();
args.putString(string,string);
ContentFragment content = new ContentFragment();
content.setArguments(args);

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}

@Override
public void onContentFragmentInteraction(String string){

}

}

NavFragment

  import android.app.Activity; 
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;

公共类NavFragment extends Fragment实现View.OnClickListener {
private static final String ARG_PARAM1 =param1;
private static final String ARG_PARAM2 =param2;
private String mParam1;
private String mParam2;
私人按钮按钮;
private OnFragmentInteractionListener mListener;

public static NavFragment newInstance(String param1,String param2){
NavFragment fragment = new NavFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1,param1);
args.putString(ARG_PARAM2,param2);
fragment.setArguments(args);
返回片段;
}

public NavFragment(){

}

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if(getArguments()!= null){
mParam1 = getArguments()。getString(ARG_PARAM1);
mParam2 = getArguments()。getString(ARG_PARAM2);
}
}

@Override
public查看onCreateView(LayoutInflater inflater,ViewGroup容器,
Bundle savedInstanceState){

查看v = inflater.inflate(R.layout.fragment_nav,container,false);

button =(Button)v.findViewById(R.id.submit);
button.setOnClickListener(this);

返回v;
}

public void onButtonPressed(String string){

}

@Override
public void onAttach(活动活动) ){
super.onAttach(activity);
尝试{
mListener =(OnFragmentInteractionListener)活动;
} catch(ClassCastException e){
抛出新的ClassCastException(activity.toString()
+必须实现OnFragmentInteractionListener);
}
}

@Override
public void onDetach(){
super.onDetach();
mListener = null;
}

@Override
public void onClick(查看v){
String string =((EditText)v.findViewById(R.id.gridSize))。的toString();
mListener.onNavFragmentInteraction(string);
}

公共接口OnFragmentInteractionListener {
public void onNavFragmentInteraction(String string);
}

}

ContentFragment

  import android.app.Activity; 
import android.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;


public class ContentFragment extends Fragment {
private static final String ARG_PARAM1 =param1;
private static final String ARG_PARAM2 =param2;
private String mParam1;
private String mParam2;
private OnFragmentInteractionListener mListener;

public static ContentFragment newInstance(String param1,String param2){
ContentFragment fragment = new ContentFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1,param1);
args.putString(ARG_PARAM2,param2);
fragment.setArguments(args);
返回片段;
}

public ContentFragment(){
//必需的空公共构造函数
}

@Override
public void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if(getArguments()!= null){
mParam1 = getArguments()。getString(ARG_PARAM1);
mParam2 = getArguments()。getString(ARG_PARAM2);
}
}

@Override
public查看onCreateView(LayoutInflater inflater,ViewGroup容器,
Bundle savedInstanceState){

查看v = inflater.inflate(R.layout.fragment_content_fragmet,container,false);

String string =1;

if(getArguments()!= null){
Bundle args = getArguments();
string =(String)args.get(string);
}
GridView gridView =(GridView)v.findViewById(R.id.gridview);

gridView.setNumColumns(Integer.parseInt(string));
gridView.setAdapter(new GridAdapter(this,Integer.parseInt(string)));

返回v;
}

public void onButtonPressed(Uri uri){

}

@Override
public void onAttach(活动活动) ){
super.onAttach(activity);
尝试{
mListener =(OnFragmentInteractionListener)活动;
} catch(ClassCastException e){
抛出新的ClassCastException(activity.toString()
+必须实现OnFragmentInteractionListener);
}
}

@Override
public void onDetach(){
super.onDetach();
mListener = null;
}

公共接口OnFragmentInteractionListener {
public void onContentFragmentInteraction(String string);
}
}

错误

  03-02 18:46:47.254 1958-1958 / com.peterchappy.lab5 E / AndroidRuntime:FATAL EXCEPTION:main 
流程:com.peterchappy.lab5 ,PID:1958
java.lang.RuntimeException:无法启动活动ComponentInfo {com.peterchappy.lab5 / com.peterchappy.lab5.MainActivity}:java.lang.ClassCastException:com.peterchappy.lab5.MainActivity@2298f3ca必须在android.app.A活动时使用android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
实现OnFragmentInteractionListener
。在android.app.A活动时,我会在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
实现
。 ActivityThread.access $ 800(ActivityThread.java:144)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1278)
在android.os.Handler.dispatchMessage(Handler.java:102) )
在android.os.Looper.loop(Looper.java:135)
在android.app.ActivityThread.main(A ctivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
引起: java.lang.ClassCastException:com.peterchappy.lab5.MainActivity@2298f3ca必须在com.peterchappy.lab5.ContentFragmet.onAttach(ContentFragmet.java:83)
的android.app.FragmentManagerImpl上实现OnFragmentInteractionListener
。 moveToState(FragmentManager.java:853)
在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
在android.app.BackStackRecord.run(BackStackRecord.java:833)
在android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452)
在android.app.Activity.performStart(Activity.java:5948)
在android.app.ActivityThr ead.performLaunchActivity(ActivityThread.java:2261)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
在android.app.ActivityThread.access $ 800(ActivityThread.java:144)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1278)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper。 loop(Looper.java:135)
在android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android。 internal.os.ZygoteInit.main(ZygoteInit.java:694)


https://developer.android.com/ reference / android / app / Fragment.html> Fragment 包含一个具有相同签名的方法, MainActivity 正在实现一种方法来尝试覆盖这两个接口。



更改一个或两个方法的签名,然后在 MainActivity 中实现这两个方法。例如:



NavFragment

  public interface OnFragmentInteractionListener {
public void onNavFragmentInteraction(String string);
}

ContentFragment

  public interface OnFragmentInteractionListener {
public void onContentFragmentInteraction(String string);
}

MainActivity

  @Override 
public void onNavFragmentInteraction(String string){
// Do stuff
}

@Override
public void onContentFragmentInteraction(String string){
//做不同的东西
}


It's trowing an error saying I must implment the OnFragmentInteractionListener, but as far as I'm aware I'm implementing it properly ... Any help would be greatly appreciated.

Main Activity

    import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;


public class MainActivity extends Activity implements NavFragment.OnFragmentInteractionListener, ContentFragment.OnFragmentInteractionListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.nav, new NavFragment());
        fragmentTransaction.commit();

        fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.content, new ContentFragment());
        fragmentTransaction.commit();
    }

    @Override
    public void onNavFragmentInteraction(String string) {
        Bundle args = new Bundle();
        args.putString("string", string);
        ContentFragment content = new ContentFragment();
        content.setArguments(args);

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }

    @Override
    public void onContentFragmentInteraction(String string){

    }

}

NavFragment

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;

public class NavFragment extends Fragment implements View.OnClickListener {
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";
    private String mParam1;
    private String mParam2;
    private Button button;
    private OnFragmentInteractionListener mListener;

    public static NavFragment newInstance(String param1, String param2) {
        NavFragment fragment = new NavFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    public NavFragment() {

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment_nav, container, false);

        button = (Button) v.findViewById(R.id.submit);
        button.setOnClickListener(this);

        return v;
    }

    public void onButtonPressed(String string) {

    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    @Override
    public void onClick(View v) {
        String string =  ((EditText) v.findViewById(R.id.gridSize)).toString();
        mListener.onNavFragmentInteraction(string);
    }

    public interface OnFragmentInteractionListener {
        public void onNavFragmentInteraction(String string);
    }

}

ContentFragment

import android.app.Activity;
import android.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;


public class ContentFragment extends Fragment {
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";
    private String mParam1;
    private String mParam2;
    private OnFragmentInteractionListener mListener;

    public static ContentFragment newInstance(String param1, String param2) {
        ContentFragment fragment = new ContentFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    public ContentFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment_content_fragmet, container, false);

        String string = "1";

        if (getArguments() != null) {
            Bundle args = getArguments();
            string = (String) args.get("string");
        }
        GridView gridView = (GridView) v.findViewById(R.id.gridview);

        gridView.setNumColumns(Integer.parseInt(string));
        gridView.setAdapter(new GridAdapter(this, Integer.parseInt(string)));

        return v;
    }

    public void onButtonPressed(Uri uri) {

    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface OnFragmentInteractionListener {
        public void onContentFragmentInteraction(String string);
    }
}

error

03-02 18:46:47.254    1958-1958/com.peterchappy.lab5 E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.peterchappy.lab5, PID: 1958
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.peterchappy.lab5/com.peterchappy.lab5.MainActivity}: java.lang.ClassCastException: com.peterchappy.lab5.MainActivity@2298f3ca must implement OnFragmentInteractionListener
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.ClassCastException: com.peterchappy.lab5.MainActivity@2298f3ca must implement OnFragmentInteractionListener
        at com.peterchappy.lab5.ContentFragmet.onAttach(ContentFragmet.java:83)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:853)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
        at android.app.BackStackRecord.run(BackStackRecord.java:833)
        at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452)
        at android.app.Activity.performStart(Activity.java:5948)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

解决方案

The OnFragmentInteractionListener interfaces in both of your Fragments contain a method with the same signature, and MainActivity is implementing one method to try to cover both interfaces.

Change the signature of one or both of the methods, then implement both methods in MainActivity. For example:

NavFragment

    public interface OnFragmentInteractionListener {
        public void onNavFragmentInteraction(String string);
    }

ContentFragment

    public interface OnFragmentInteractionListener {
        public void onContentFragmentInteraction(String string);
    }

MainActivity

    @Override
    public void onNavFragmentInteraction(String string) {
        // Do stuff
    }

    @Override
    public void onContentFragmentInteraction(String string) {
        // Do different stuff
    }

这篇关于错误:必须实现OnFragmentInteractionListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆