Как я могу заставить диалог работать внутри фрагмента?

#java #android

#java #Android

Вопрос:

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

 popAddPost = new Dialog(this);
  

В ошибке указано, что:

 Dialog (android.content.context) in Dialog cannot be applied to (com.comhar.firebaseapp.Fragments.ForumFragment)
  

Я пробовал использовать несколько решений, которые нашел в Интернете, но ни одно из них не сработало

ForumFragment.java

 public class ForumFragment extends Fragment {

    Dialog popAddPost;


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


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

        iniPopup();

        FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                popAddPost.show();
            }
        });

        return view;
    }

    private void iniPopup() {

        popAddPost = new Dialog(this);
        popAddPost.setContentView(R.layout.popup_add_post);
        popAddPost.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        popAddPost.getWindow().setLayout(Toolbar.LayoutParams.MATCH_PARENT,Toolbar.LayoutParams.WRAP_CONTENT);
        popAddPost.getWindow().getAttributes().gravity = Gravity.TOP;


    }

}
  

fragment_forum.xml

 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Fragments.ForumFragment">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="forum" />

    <android.support.design.widget.FloatingActionButton
        android:id="@ id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="20dp"
        android:src="@drawable/nep_post" />

</FrameLayout>
  

Приложение не будет запускаться, поскольку я получаю сообщение об ошибке:

error: incompatible types: ForumFragment cannot be converted to Context

буду признателен за любой совет!

Комментарии:

1. привет @cian404, ты пробовал мой ответ ниже? помогло ли это вам решить вашу проблему? если это произошло, пожалуйста, подумайте о том, чтобы отметить мой ответ как принятый, щелкнув стрелку слева. таким образом, другие также могут извлечь выгоду из решения.

Ответ №1:

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

 popAddPost = new Dialog(this);
  

этим:

 popAddPost = new Dialog(getActivity());
  

Ответ №2:

Обновите свой метод iniPopup () следующим образом:

 private void iniPopup() {
    popAddPost = new Dialog(getActivity());
    popAddPost.setContentView(R.layout.activity_login);
    popAddPost.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    popAddPost.getWindow().setLayout(Toolbar.LayoutParams.MATCH_PARENT, Toolbar.LayoutParams.WRAP_CONTENT);
    popAddPost.getWindow().getAttributes().gravity = Gravity.TOP;
}
  

Дайте мне знать в случае любого запроса.