Использование Custom DialogFragment в качестве динамического диалогового окна android-java - PullRequest
0 голосов
/ 29 января 2019

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

here is the image

Я хочу использовать его динамически там, где я могу его использоватьне только для одного XML-файла.Кто-нибудь знает, как я могу установить прослушиватель нажатия кнопки в классе appcompact из фрагмента диалогового окна при вызове?

Я просто хочу установить событие clickclick диалогового фрагмента в другом XML-файле.

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

класс YesNoDialogFragment

public class DialogYesNo extends DialogFragment {

LayoutInflater inflater;
View v;


@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {

    inflater = getActivity().getLayoutInflater();
    v = inflater.inflate(R.layout.dialog_yesno,null);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setView(v);
    return builder.create();
}
}

XML-файл DialogFragment

 <?xml version="1.0" encoding="utf-8"?>
   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:background="@drawable/dialog_background"
android:layout_gravity="center">

<TextView
    android:id="@+id/yesno_title"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:text="TITLE"
    android:textAlignment="center"
    android:textAllCaps="true"
    android:textSize="10pt"
    android:background="#1b1b01"
    android:textColor="#fff"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="7dp"
    android:paddingLeft="10dp"
    android:textStyle="bold"/>

<View
    android:id="@+id/divider"
    android:layout_width="match_parent"
    android:layout_height="5dp"
    android:background="?android:attr/listDivider" />

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:background="#520456">

    <TextView
        android:id="@+id/yesno_message"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="Message"
        android:textAllCaps="true"
        android:textSize="12dp"
        android:textColor="#fff"
        android:paddingLeft="10dp"
        android:textStyle="bold"/>

</ScrollView>

<View
    android:id="@+id/divider1"
    android:layout_width="match_parent"
    android:layout_height="10dp"
    android:background="?android:attr/listDivider" />

<LinearLayout
    android:orientation="horizontal"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:gravity="center">

    <Button
        android:id="@+id/dialog_No"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="NO"
        android:background="@drawable/dialog_background"
        android:textColor="#000"
        android:textStyle="bold"
        android:textSize="10pt"/>
    <Button
        android:id="@+id/dialog_Yes"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="YES"
        android:layout_marginLeft="8dp"
        android:background="@drawable/dialog_background"
        android:textColor="#000"
        android:textStyle="bold"
        android:textSize="10pt"/>
</LinearLayout>

это код в MainActivity

                btnYes = dialogYesNo.getActivity().findViewById(R.id.dialog_Yes);
                btnNo = dialogYesNo.getActivity().findViewById(R.id.dialog_No);

                btnYes.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(MainActivity.this,TutwithNavigation.class);
                        startActivity(intent);
                    }
                });

                btnNo.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                    // code here

                    }
                });

1 Ответ

0 голосов
/ 29 января 2019

попробуйте findViewById в DialogYesNo и добавьте для него setListener следующим образом:

private OnClickListener onYesClick;
private OnClickListener onNoClick;
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    inflater = getActivity().getLayoutInflater();
    v = inflater.inflate(R.layout.dialog_yesno,null);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setView(v);
    View btnYes = v.findViewById(R.id.dialog_Yes);
    View btnNo = v.findViewById(R.id.dialog_No);               
    btnYes.setOnClickListener(onYesClick);
    btnNo.setOnClickListener(onNoClick);
    return builder.create();
}
}
public void setOnYesClick(OnClickListener listener){
    onYesClick = listener
}
public void setOnNoClick(OnClickListener listener){
    onNoClick = listener
}

используйте вместо этого setOnYesClick и setOnNoClick

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...