Я хочу, чтобы мой 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);
}
}
это - то, что помечает меня ошибкой
Если ты используешь 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());