2013-07-19 2 views
3

Я пытался создать диалог для моего приложения, но это довольно сложно сделать с отсутствием примеров, доступных в Интернете. Ниже изображено нечто подобное, что я хотел бы.DialogFragments для пользователей, чтобы ввести данные

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

My attempt at dialogFragment

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

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.*; 
import android.widget.Button; 
import android.widget.ListView; 
import java.util.ArrayList; 
import java.util.List; 

public class Reminders extends Activity 
{ 

    Button add, edit, remove; 
    ListView lv; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.reminders); 
     initializeVariables(); 

     add.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       showDialog(); 
      } 
     }); 

     List<ListViewItem> items = new ArrayList<Reminders.ListViewItem>(); 
     items.add(new ListViewItem() 
     { 
      { 
       ThumbnailResource = R.drawable.ic_launcher; 
       Title = "Item1 Title"; 
       Date = "Item1 Date"; 
       Time = "Item1 Time"; 
       Amount = "£0.00"; 
      } 
     }); 
     items.add(new ListViewItem() 
     { 
      { 
       ThumbnailResource = R.drawable.ic_launcher; 
       Title = "Item2 Title"; 
       Date = "Item2 Date"; 
       Time = "Item2 Time"; 
       Amount = "£0.00"; 
      } 
     }); 

     CustomListViewAdapter adapter = new CustomListViewAdapter(this, items); 
     lv.setAdapter(adapter); 

    } 

    private void initializeVariables() 
    { 
     add = (Button) findViewById(R.id.bAdd); 
     edit = (Button) findViewById(R.id.bEdit); 
     remove = (Button) findViewById(R.id.bRemove); 
     lv = (ListView) findViewById(R.id.LVReminder); 
    } 

    class ListViewItem 
    { 
     public int ThumbnailResource; 
     public String Title; 
     public String Date; 
     public String Time; 
     public String Amount; 
    } 


    void showDialog() { 
     DialogFragment newFragment = MyAlertDialogFragment 
       .newInstance(R.string.dialog_title); 
     newFragment.show(getFragmentManager(), "New"); 
    } 

    public void doPositiveClick() { 
     // Do stuff here. 
     Log.i("FragmentAlertDialog", "Positive click!"); 
    } 

    public void doNegativeClick() { 
     // Do stuff here. 
     Log.i("FragmentAlertDialog", "Negative click!"); 
    } 

    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.ic_launcher) 
        .setTitle(title) 
        .setPositiveButton(R.string.alert_dialog_ok, 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, 
                int whichButton) { 
            ((Reminders) getActivity()) 
              .doPositiveClick(); 
           } 
          }) 
        .setNegativeButton(R.string.alert_dialog_cancel, 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, 
                int whichButton) { 
            ((Reminders) getActivity()) 
              .doNegativeClick(); 
           } 
          }).create(); 
     } 
    } 
} 

Я был бы признателен за любые советы о том, как получить DialogFragment, как в первом ПОС я предоставил. Спасибо всем, кто пытается мне помочь.

ответ

2

Вы можете создать макет, который вы хотите получить через XML-документ. Затем оттуда вы можете изменить onCreateDialog следующим образом:

@Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) 
    { 
     int title = getArguments().getInt("title"); 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     View v = inflater.inflate(R.layout.my_dialog_layout, null); 

     return new AlertDialog.Builder(getActivity()) 
       .setView(v) 
       .setIcon(R.drawable.ic_launcher) 
       .setTitle(title) 
       .setPositiveButton(R.string.alert_dialog_ok, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
               int whichButton) { 
           ((Reminders) getActivity()) 
             .doPositiveClick(); 
          } 
         }) 
       .setNegativeButton(R.string.alert_dialog_cancel, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
               int whichButton) { 
           ((Reminders) getActivity()) 
             .doNegativeClick(); 
          } 
         }).create(); 
    } 
} 
+0

Было бы лучше, если бы я просто включил кнопки в макет XML, вместо того, чтобы иметь .setPositiveButton и .setNegativeButton –

+0

Зависит от того, где вы хотите кнопки. Если вам просто нужно ОК и отменить в нижней части диалогового окна, я думаю, что у вас все хорошо. Если вам нужно больше в разных местах, то делайте их через XML. Также я бы согласился с Warpzit, что пример компоновки довольно сложный для телефона, и вы можете рассмотреть «более легкий» макет для телефона с несколькими диалогами в качестве опции. – TronicZomB

+0

Да, в нижней части диалогового окна было бы здорово. Макет в примере pic - это в основном то, что я хочу сделать. Дайте пользователям возможность установить напоминание, поэтому они выбирают дату, на которую они хотят напомнить о вещи, и затем должна быть возможность повторить ее на дату x в момент времени x и дату y в момент y –

1

кажется более мне, что это «диалог» представляет собой деятельность с диалоговой темой, попробуйте следующее:

<activity android:theme="@android:style/Theme.Dialog"> 
+0

Но я хочу, чтобы диалог всплывал перед текущей страницей. Я не хочу, чтобы приложение полностью открывало новую страницу. –

+0

То, что делает диалоговое окно темы, открывает активность сверху, как диалог – Broak

1

я бы не стал рекомендуется создать макет, который вы поставили, поскольку он слишком сложный для мобильных устройств. Но может быть создана упрощенная версия с 1 опцией на строку.

Вы можете увидеть все поддерживаемые кнопки, опции и т. Д. Для AlertDialog.Builder в the official docs.

Как указано в @TronicZomB, вы можете использовать свой собственный XML-макет с setView(View view).

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