Сделать фрагмент неактивным

127
25 марта 2021, 15:40

[![Имеется 2 фрагмента: фрагмент меню, и собственно фрагмент "Предложение дня." При нажатии на кнопку BUTTON, фрагмент "предложение дня" становится невидимым (.hide()). Нужно реализовать, пока фрагмент ПРЕДЛОЖЕНИЕ ДНЯ - видимый, фрагмент МЕНЮ был неактивный (я не мог его листать) и был затемнен.]1]]

Answer 1

Мне кажется то что у вас на скриншоте можно сделать через простой диалог с собственной разметкой. Вы можете указать при создании диалога что его нельзя скрыть тапом за его пределами. Так же вы можете затемнить окружающее пространство вокруг этого диалога. Чтобы его все-таки скрыть я вам советую там сделать кнопку для закрытия диалога. Ниже привожу пример создания такого диалога:

<?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="match_parent"
    android:orientation="vertical"
    android:padding="10dp">
    <EditText
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="15dp"
        android:hint="Enter Email"
        android:inputType="textEmailAddress" />
    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter your password"
        android:inputType="textPassword" />
</LinearLayout>

Дальше вы делаете класс для того чтобы обработать то что в вашем диалоге нажимается:

public class CustomLoginDialog extends DialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        View view = getActivity().getLayoutInflater().inflate(R.layout.custom_login_layout, null);
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Login");
        builder.setView(view);
        final EditText emailText = view.findViewById(R.id.email);
        final EditText passwordText = view.findViewById(R.id.password);
        builder.setNegativeButton("Cancel", null);
        builder.setPositiveButton("Login", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(getActivity(), "Email is " + emailText.getText().toString() + " and password is" + passwordText.getText().toString(), Toast.LENGTH_SHORT).show();
            }
        });
        return builder.create();
    }
    @Override
    public void onCancel(DialogInterface dialog) {
        super.onCancel(dialog);
        Toast.makeText(getActivity(), "Dialog Canceld", Toast.LENGTH_SHORT).show();
    }
}

и дальше вы его уже создаете из фрагмента или активности:

CustomLoginDialog customLoginDialog = new CustomLoginDialog();
customLoginDialog.show(getSupportFragmentManager(), "login_dialog");

Это я привел сложноватый пример, можно и попроще:

    final Dialog dialog = new Dialog(context);
    dialog.setContentView(R.layout.custom);
    dialog.setTitle("Title...");
     // set the custom dialog components - text, image and button
        TextView text = (TextView) dialog.findViewById(R.id.text);
        text.setText("Android custom dialog example!");
        ImageView image = (ImageView) dialog.findViewById(R.id.image);
        image.setImageResource(R.drawable.ic_launcher);
        Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
        // if button is clicked, close the custom dialog
        dialogButton.setOnClickListener(new OnClickListener() {
            @Override
        public void onClick(View v) {
            dialog.dismiss();
            }
            });
        dialog.show();

второй пример вы можете использовать непосредственно где вам вздумается, и так же можно здесь указать что нельзя скрыть диалог кликом за его пределами. Надеюсь один из способов вам поможет. Удачи :)

READ ALSO
Кодировка ResponseBody

Кодировка ResponseBody

@ResponseBody при формировании ответа использует StringHttpMessageConverter(исправьте, если не прав)И у него по-умолчанию кодировка ISO-8859-1

98
Какой запрос использовать в Rest Api?

Какой запрос использовать в Rest Api?

Всем приветХотелось бы узнать, можно ли при работе с Rest Api всегда использовать только POST заголовки? Или это моветон? Согласно CRUD, на каждую...

101
Передача русских символов в качестве аргументов java

Передача русских символов в качестве аргументов java

При вызове java-программы из командной строки с аргументами в качестве русских символов эти аргументы не распознаются программойЧто можно...

113
Не открывается подменю при нажатии пункта главного меню

Не открывается подменю при нажатии пункта главного меню

Я использовал библиотеку AndroidX Preference для своего проектаЭтот проект имеет главное меню и подменю

121