использовать metod getSupportFragmentManager () в fragment

Я хочу, чтобы мой dialogfragment работал во фрагменте, у меня есть следующий код, но меня помечает ошибка в getSupportFragmentManager ()

уже попробуйте помещать ему getActivity () .getSupportFragmentManager (), но medice, что мое приложение остановило ne cesito помощь, я новый.

 
 actividad DialogSinglePickerFragment

public class DialogSinglePickerFragment extends AppCompatDialogFragment {

    private static final int UNSELECTED = -1;
    private static final String ARG_SELECTED = "ARG_SELECTED";
    private static final String ARG_ITEMS = "ARG_ITEMS";
    private static final String ARG_TITLE = "ARG_TITLE";
    private static final String STATE_SELECTED = "STATE_SELECTED";

    private DialogPickerFragmentListener listener;

    private int selected;

    public static DialogSinglePickerFragment newInstance(Integer selection, String[] items, String title) {
        DialogSinglePickerFragment fragment = new DialogSinglePickerFragment();
        Bundle args = new Bundle();
        if (selection != null) {
            args.putInt(ARG_SELECTED, selection);
        }
        args.putStringArray(ARG_ITEMS, items);
        args.putString(ARG_TITLE, title);
        fragment.setArguments(args);
        return fragment;
    }

    // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        // Verify that the host activity implements the callback interface
        try {
            // Instantiate the NoticeDialogListener so we can send events to the host
            listener = (DialogPickerFragmentListener) context;
        } catch (ClassCastException e) {
            // The activity doesn't implement the interface, throw exception
            throw new ClassCastException(context.toString()
                    + " must implement DialogSinglePickerFragment");
        }
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        if (savedInstanceState != null) { //rotation
            selected = savedInstanceState.getInt(STATE_SELECTED, UNSELECTED);
        } else if (getArguments() != null) {
            selected = getArguments().getInt(ARG_SELECTED, UNSELECTED);
        }

        final String[] brands = getArguments().getStringArray(ARG_ITEMS);

        AlertDialog.Builder builder = new AlertDialog.Builder(getContext());

        builder.setTitle(getArguments().getString(ARG_TITLE))
                .setSingleChoiceItems(brands, selected, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        selected = which;
                    }
                })
                .setNegativeButton(android.R.string.cancel, null)
                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        if (selected != UNSELECTED) {
                            listener.getSelected(brands[selected]);
                            //Toast.makeText(getContext(), brands[selected], Toast.LENGTH_SHORT).show();
                        }
                    }
                });

        return builder.create();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(STATE_SELECTED, selected);
    }

}

public interface DialogPickerFragmentListener {

    void getSelected(String selected);
}

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;

public class Activity_f1_1 extends Fragment implements DialogPickerFragmentListener {

    private EditText textView;
    private String[] brands;
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;
    private OnFragmentInteractionListener mListener;

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

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

    @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) {
        // Inflate the layout for this fragment

        View view = inflater.inflate(R.layout.fragment_activity_f1_1, container, false);
        
        textView = view.findViewById(R.id.ed_hotel_f1);
        
        setupButtons();
        return view;
    }

    private void setupButtons() {
        textView.findViewById(R.id.ed_hotel_f1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DialogSinglePickerFragment dialogFragment = DialogSinglePickerFragment.newInstance(4, brands, getString(R.string.hoteles));
                dialogFragment.show(getSupportFragmentManager(),DialogSinglePickerFragment.class.getSimpleName());
            }
        });
    }

    @Override
    public void getSelected(String selected) {
        textView.setText(selected);
    }



    // TODO: Rename method, update argument and hook method into UI event
    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 {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}

introducir la descripción de la imagen aquí

это - то, что помечает меня ошибкой

1
задан 20.02.2019, 10:21
1 ответ

Если ты используешь DialogFragment, проблема проистекает из контекста, который ты определяешь.

, Если ты используешь support library

import android.support.v4.app.FragmentManager;

, используй: getActivity().getSupportFragmentManager() из этой формы:

dialogFragment.show(getActivity().getSupportFragmentManager(),DialogSinglePickerFragment.class.getSimpleName());

, Но если ты используешь import:

import android.app.FragmentManager;

ты должен использовать: getActivity().getFragmentManager():

    dialogFragment.show(getActivity().getFragmentManager(),DialogSinglePickerFragment.class.getSimpleName());

ActualizaciГіn:

В действительности ты не используешь DialogFragment используешь DialogSinglePickerFragment следовательно должен реализовывать эти изменения.

Сначала верьте в Интерфейс DialogPickerFragmentListener:

public interface DialogPickerFragmentListener {

    void getSelected(String selected);
}

Activity, которые abrirГЎ diГЎlogo должны увеличивать AppCompatActivity и осуществлять Интерфейс DialogPickerFragmentListener:

public class Activity_f1_1 extends AppCompatActivity implements DialogPickerFragmentListener {

это ты obligarГЎ в sobrescribir mГ©todo:

@Override
public void getSelected(String selected) {
    ....
    ....
}

сейчас чтобы называть Диалогом эту - правильная форма:

DialogSinglePickerFragment dialogFragment = DialogSinglePickerFragment.newInstance(4, brands, getString(R.string.hoteles));
dialogFragment.show(getSupportFragmentManager(),DialogSinglePickerFragment.class.getSimpleName());

introducir la descripción de la imagen aquí

0
ответ дан 27.10.2019, 03:34