Необходимо реализовать OnFragmentInteractionListener () - PullRequest
0 голосов
/ 03 мая 2018

Я знаю, что я не первый, кто поднимает этот вопрос здесь, но, к сожалению, как я уже упоминал в своем заголовке, я получил ошибку при запуске приложения. Но я импортировал import android.support.v4.app.Fragment; в свои фрагменты.

Из родительского фрагмента, когда я щелкаю по нему, у меня есть вид карты, мне нужно вызвать другой фрагмент, чтобы показать виды, связанные с просмотром карты по клику.

И я попробовал множество решений для той же проблемы, опубликованной в stackoverflow. Но у меня ничего не получилось.

Reminders.java

public class Reminders extends Fragment {

    private OnFragmentInteractionListener mListener;
    List<reminder> lstreminder;

    public Reminders() {

    }

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

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.fragment_reminders, container, false);

        lstreminder = new ArrayList<>();
        lstreminder.add(new reminder("Alarm",R.drawable.alarms));
        lstreminder.add(new reminder("Birthday",R.drawable.birthdays));
        lstreminder.add(new reminder("Anniversary",R.drawable.anniversaries));
        lstreminder.add(new reminder("Buy Gifts",R.drawable.buygift));
        lstreminder.add(new reminder("Bill Payments",R.drawable.billpayments));
        lstreminder.add(new reminder("Call / SMS",R.drawable.call));
        lstreminder.add(new reminder("Recharges",R.drawable.recharges));
        lstreminder.add(new reminder("Meetings",R.drawable.meetings));
        lstreminder.add(new reminder("Insurance",R.drawable.insurances));
        lstreminder.add(new reminder("Exams",R.drawable.exams));
        lstreminder.add(new reminder("Holidays",R.drawable.holidays));
        lstreminder.add(new reminder("Medical",R.drawable.medical));
        lstreminder.add(new reminder("Purchase",R.drawable.purchase));
        lstreminder.add(new reminder("Travel",R.drawable.travel));
        lstreminder.add(new reminder("Shows",R.drawable.shows));

        RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.mRecyclerView_id);
        final RecyclerviewAdapter recyclerviewAdapter = new RecyclerviewAdapter(getActivity(),lstreminder);
        recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),3));
        recyclerView.setAdapter(recyclerviewAdapter);
        recyclerviewAdapter.setOnItemClickListner(new RecyclerviewAdapter.onItemClickListner() {
            @Override
            public void onClick(reminder str) {
                if(str.getmTitle().equals("Alarm")){
                    Fragment fragment = new Alarm();
                    getFragmentManager().beginTransaction()
                            .replace(R.id.fragmrnt_alarm, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit();
                }
                recyclerviewAdapter.notifyDataSetChanged();

            }
        });
        return rootView;
    }

    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

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

    public interface OnFragmentInteractionListener {
        void onFragmentInteraction(Uri uri);
    }

}

Alarm.java

public class Alarm extends Fragment {

    private OnFragmentInteractionListener mListener;

    public Alarm() {

    }


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

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {

        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_alarm, container, false);
    }

    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

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

    public interface OnFragmentInteractionListener {
        void onFragmentInteraction(Uri uri);
    }
}

1 Ответ

0 голосов
/ 03 мая 2018

Вам нужно заставить родительское действие реализовать OnFragmentInteractionListener и переопределить методы, предоставляемые этим интерфейсом.

class MyActivity implements OnFragmentInteractionListener

В этом месте происходит сбой вашего кода, возможно, ваша деятельность не реализует указанный интерфейс, и из-за этого происходит сбой при прикреплении фрагмента:

@Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...