Реализация подсказки для пользователя

268
18 мая 2018, 01:40

Делаю приложение с математическими и логическими квестами. На каждом уровне у пользователя будет возможность использовать подсказку, то есть метод решения и ответ появятся на экране. Вопрос заключается в том, как лучше реализовать это появление на экране? Можно просто создать новое активити с ответом, которое будет появлятся по нажатию кнопки, но, как по мне, выглядит это не особо эстетично. Есть ли другие способы? Например, чтобы всплывало окно с ответом вместо нового активити? И как это реализовать?

Answer 1

Вообще, это базовые знания, которые нужно учить вместе с программированием на Андроид) Конкретно для вашей задачи лучше подойдёт окно диалога (созданное через фрагмент). Можно использовать PopupWindow.

Вот код DialogFragment:

import android.support.v4.app.DialogFragment;
public class DialogCustom extends DialogFragment {
    public static final String TYPE = "type";       
    public static final String ANSWER = "answer";  
    public static final int HINT = 0;
    public static DialogCustom newInstance(int type, String answer) {
        Bundle args = new Bundle();
        args.putInt(TYPE, type);
        args.putString(ANSWER, answer);
        DialogCustom fragment = new DialogCustom();
        fragment.setArguments(args);
        return fragment;
    }
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        switch (getArguments().getInt(TYPE)) {
            case HINT:
                return hint();                
        }
        return super.onCreateDialog(savedInstanceState);
    }
 private Dialog hint() {
        AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
        View v = LayoutInflater.from(getActivity()).inflate(R.layout.my_dialog, null, false); 
        ((TextView)v.findViewById(R.id.text))
              .setText(getArguments().getString(ANSWER));
        v.findViewById(R.id.text).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {                   
                dismiss();
            }
        });          
        adb.setView(v);    
        Dialog dialog = adb.create();    
        dialog.setCancelable(true);
        dialog.setCanceledOnTouchOutside(true);
        return dialog;
    }

layout my_dialog.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <TextView
        android:layout_width="match_parent"
        android:id="@+id/text"
        android:gravity="center"
        android:layout_height="wrap_content"/>   
    <ImageView
        android:layout_width="match_parent"
        android:id="@+id/img"
        android:gravity="center"
        android:layout_height="wrap_content"/>
</LinearLayout>

Использование: в нужный момент - DialogCustom.newInstance(DialogCustom.HINT,"Подсказка или ответ").show(getSupportFragmentManager,"dialog);

в код фрагмента всегда можно добавить: public static final int ANOTHER_DIALOG = 1; и

case ANOTHER_DIALOG:
      return anotherDialog();

чтобы вызывать диалоги для других задач.

READ ALSO
Ошибка java.lang.NullPointerException в jsp

Ошибка java.lang.NullPointerException в jsp

Всем приветпытаюсь при помощи сервелета + jsp сделать генерацию таблиц по введённым числам

266
Не создается окно в eclipse

Не создается окно в eclipse

Когда пытаюсь создать окно просто через некоторое время в консоли появляется надпись terminated и всеМне сказали нужно использовать SwingUtilities,...

243
Получение коллекции из Firebase

Получение коллекции из Firebase

В своем андроид-приложении я работаю с FirebaseКак я могу обратиться к полю Ingridients в моей базе данных и записать все значения поля Ingridients в ArrayList?...

237
Как сгенерировать stream дат?

Как сгенерировать stream дат?

Нужно сгенерировать Stream<LocalDate> начиная с 0101

247