2015-05-11 4 views
-2

Я искал и нашел много разных ответов для этого вопроса, но ничего не устраивает для меня. Total android n00b, и я прошу вашего терпения заранее.Android: Реализация базового диалога

I'm having trouble dealing with a FileChooser problem with Android KitKat. As per [here][1], and according to [Steve N][2] i get the impression that this file chooser problem is caused by my android version (4.4.2) 

Учитывая, что filechooser не работает, я хочу реализовать базовый диалог. Я собираюсь проверить номер версии Android для устройства, а затем отобразить сообщение, ссылаясь на текущую нехватку поддержки, если номер версии возвращается с 4.4 спереди.

В настоящее время, я просто используя тост

public boolean checkVersionSupport(){ 
    if (Build.VERSION.RELEASE.equals("4.4.2") { 
     Toast toast = Toast.makeText(context, androidOS, duration); 
     toast.show(); 
    } 
} 

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

Пара вещей, которые я нашел трудными после прочтения материалов для разработчиков Android.

  1. Нужен ли мне XML-файл макета для диалогового окна?

  2. Где я могу поместить файл класса для класса MyAlertDialogFragment, который я создаю? Может ли он находиться где-нибудь в папке java или он должен находиться в подпапке java/com.myproject ... И какое влияние это оказывает на импорт этого класса в файл java-активности?

  3. Может кто-нибудь объяснить, где FragmentAlertDialog исходит из материалов для разработчиков Android.

    public static class MyAlertDialogFragment extends DialogFragment { 
    
    public static MyAlertDialogFragment newInstance(int title) { 
        MyAlertDialogFragment frag = new MyAlertDialogFragment(); 
        Bundle args = new Bundle(); 
        args.putInt("title", title); 
        frag.setArguments(args); 
        return frag; 
    } 
    
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
        int title = getArguments().getInt("title"); 
    
        return new AlertDialog.Builder(getActivity()) 
          .setIcon(R.drawable.alert_dialog_icon) 
          .setTitle(title) 
          .setPositiveButton(R.string.alert_dialog_ok, 
           new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int whichButton) { 
             ((**FragmentAlertDialog**)getActivity()).doPositiveClick(); 
            } 
           } 
          ) 
          .setNegativeButton(R.string.alert_dialog_cancel, 
           new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int whichButton) { 
             ((**FragmentAlertDialog**)getActivity()).doNegativeClick(); 
            } 
           } 
          ) 
          .create(); 
        } 
    } 
    
  4. Что лучше всего подходит для значков? Я вижу дискуссию по этому поводу, но для простой цели - иметь значок в верхней части диалогового окна, для одного базового использования, каким будет самый быстрый способ сделать это? Я просто копирую файлы в папку res и ссылаясь на них ... 48dp? Это может быть совершенно другой вопрос.

+0

Если вы хотите выбрать файл, вы должны посмотреть исходный код для некоторых уже существующих библиотек, они полезны - мне это особенно интересно: https://github.com/spacecowboy/NoNonsense-FilePicker – EpicPandaForce

+0

Я не слишком сильно нажимаю на то, чтобы заставить сборщик файлов работать. Я достаточно доволен, что пока не поддерживаю эту версию Android. Если релиз lollipop будет продолжаться для моего мобильного провайдера, то я пересматриваю, но я ожидаю, что обновление будет выпущено довольно скоро. Но спасибо! Я ценю усилия, направленные на то, чтобы решить, что, несомненно, является большой проблемой. К сожалению, это более простая проблема реализации диалога, в которой я застрял в mo. –

ответ

0

мне нужен макет XML-файл для диалогового окна ли?

Это, честно, зависит от того, какой тип диалога вы используете.

  • AlertDialog The не требует определенного макета, все, что вам нужно использовать AlertDialog.Builder() и установить положительные/отрицательные кнопки, и как она обрабатывает это.

  • Метод DialogFragment onCreateDialog() является предпочтительным способом использования AlertDialog. Он также не требует макета XML, но как таковые, его расположение по-прежнему ограничено по существу Да/Нет варианта: look here for complete example

  • Метод DialogFragment onCreateView() позволяет создать диалог из указанного макета XML.Поэтому, если вы хотите настроить представление диалогового окна за пределами «название, описание, да/нет», то да, вам нужно указать XML-файл для фрагмента диалога, посмотрите here for an example, хотя в совете говорится, что вы должны изучить ButterKnife и Отто библиотеки, чтобы сделать его еще лучше.

Где нужно поместить файл класса для MyAlertDialogFragment класса я создаю? Может ли он находиться где-нибудь в папке java или он должен находиться в подпапке java/com.myproject ... И какое влияние это оказывает на импорт этого класса в файл java-активности?

Внутри проекта. Хотя я предпочитаю ставить его как-то вроде <projectroot>/presentation/fragments/dialog, с пакетом.

Может кто-нибудь объяснить, где FragmentAlertDialog исходит из материалов для разработчиков Android.

FragmentAlertDialog это предполагается Activity, из которого показан фрагмент диалога MyAlertDialogFragment, и предполагается, что есть методы doPositiveClick() и doNegativeClick(). Предполагаемый title int является, скорее всего, строковым ресурсом , определенным в /res/values/strings.xml, который используется для локализации. Например, R.string.fancy_title_name.

Так что это что-то вроде этого

public class FragmentAlertDialog extends AppCompatActivity { 
    @Override 
    public void onCreate(Bundle saveInstanceState) { 
     super.onCreate(saveInstanceState); 
     setContentView(R.layout.activity_fragment_alert_dialog); 
     //stuff 
    } 

    @Override 
    public void onPostResume() { 
     MyAlertDialogFragment madf = MyAlertDialogFragment.newInstance(R.string.something); 
     madf.show(getSupportFragmentManager(), "alert-dialog-fragment"); 
    } 
} 

В противном случае, MyAlertDialogFragment просто простирается от DialogFragment и переопределяет onCreateDialog создать AlertDialog внутри этой DialogFragment.

В случае, если вы спросите, метод newInstance() так, чтобы вы не использовали параметризованный конструктор. Фрагменты не должны иметь параметризованных конструкторов, они должны получать свои данные в методе setArguments(Bundle).

Что такое лучшая практика для значков?

См. material design guidelines.

Смежные вопросы