3

Я пытаюсь создать упрощенное диалоговое окно, подобное DatePickerDialog. Созданный мной Dialog должен предоставить пользователю массив изображений, из которых они могут быть выбраны.Пользовательский диалог Фрагмент

Я считаю, что мне удалось создать массив и добавить к нему правильные изображения, проблема, с которой я сейчас сталкиваюсь, - это получить сообщение Dialog. Что я должен возвращать?

Я просмотрел AlertDialogs и так, но я не уверен, что делать, чтобы реализовать их.

ОБНОВЛЕНО: Неподвижная проблема, приведенный ниже код работает

ИЗОБРАЖЕНИЯ PICKER

public class PicturePickerFragment extends DialogFragment { 

ArrayList<Integer> imageList = new ArrayList<Integer>(); 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // fill an array with selected images 

    String title = "Picture"; 

    imageList.add(R.drawable.barbershop); 
    imageList.add(R.drawable.wedding); 
    imageList.add(R.drawable.meeting); 
    imageList.add(R.drawable.barbershop); 

    // return alertdialog 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

    LayoutInflater inflater = getActivity().getLayoutInflater(); 

    // Inflate and set the layout for the dialog 
    // Pass null as the parent view because its going in the dialog layout 
    builder.setView(inflater.inflate(R.layout.activity_create, null)) 
      .setTitle(R.string.event_type) 
      .setPositiveButton(R.string.select_picture, 
        new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, 
           int which) { 
          // call the method on the parent activity when 
          // user click the positive button 
         } 
        }); 
    return builder.create(); 
} 

} 

СПРАВОЧНО

public class DatePickerFragment extends DialogFragment implements 
    DatePickerDialog.OnDateSetListener { 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // Use the current date as the default date in the picker 
    final Calendar c = Calendar.getInstance(); 
    int year = c.get(Calendar.YEAR); 
    int month = c.get(Calendar.MONTH); 
    int day = c.get(Calendar.DAY_OF_MONTH); 

    // Create a new instance of DatePickerDialog and return it 
    return new DatePickerDialog(getActivity(), this, year, month, day); 
} 

public void onDateSet(DatePicker view, int year, int month, int day) { 
    // Do something with the date chosen by the user 
    month++; 
    String dateString = month + "/" + day + "/" + year; 
    Button b = (Button) getActivity().findViewById(R.id.btn_date); 
    b.setText(dateString); 
} 
} 

фрагмента БУДЕТ использовать как ЭТА

<Button 
    android:id="@+id/btn_picture" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_marginBottom="15dp" 
    android:layout_marginTop="15dp" 
    android:layout_weight="1" 
    android:background="@null" 
    android:drawablePadding="15dp" 
    android:onClick="showPicturePickerDialog" 
    android:drawableTop="@drawable/ico_picture" 
    android:text="Picture" 
    android:textColor="@color/darkbrown" 
    android:textSize="20sp" /> 
+0

PLS см http://developer.android.com/reference/android/app/DialogFragment.html этой ссылку и сделать Google, прежде чем отправлять вопрос –

ответ

5

Если деятельность, в которой вы хотите, чтобы открыть DialogFragment расширяющий FragmentActivity, вы должны выполнить:

PicturePickerFragment dialog = new PicturePickerFragment(); 
dialog.show(getSupportFragmentManager(), "YourDialog"); 

Кроме того, необходимо надуть диалоговый файл макета в методе onCreateDialog вашего диалогового класса фрагмента.

Используя AlertDialog.Builder, вы можете достичь всего этого легко, например.

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

LayoutInflater inflater = getActivity().getLayoutInflater(); 

// Inflate and set the layout for the dialog 
// Pass null as the parent view because its going in the dialog layout 
builder.setView(inflater.inflate(R.layout.dialoglayout, null)) 
.setTitle(R.string.dialog_title) 
.setPositiveButton(R.string.pos_button, new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // call the method on the parent activity when user click the positive button 
    } 
}) 
.setNegativeButton(R.string.neg_button, new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // call the method on the parent activity when user click the negative button 
    } 
}); 
return builder.create(); 

Есть много примеров на http://developer.android.com/reference/android/app/DialogFragment.html

+0

Совершенных. Теперь я хочу добавить массив изображений, в которых пользователь может выбрать. Когда я использую .setView(), должен ли я использовать макет, в котором ListView содержит массив изображений или что? –

+0

Да, ваш диалог должен содержать ListView. Вы можете заполнить список специальным адаптером, который расширяет [ArrayAdapter] (http://developer.android.com/reference/android/widget/ArrayAdapter.html), который содержит ваш массив изображений. Задайте другой вопрос, если вам нужна помощь, это совершенно другая тема :) –

1

Существуют различные способы, вы можете создать свой диалог либо с помощью метода OnCreateView или используя OnCreateDialog метод, если вы расширяете DialogFragment класс и поэтому реализация идет по-другому для обоих.

Вы должны вернуть свой пример Dialog от OnCreateDialog.

Как показать диалог в Activity

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
Fragment prev = getFragmentManager().findFragmentByTag("YourFragmentID"); 

if (prev != null) { 
     ft.remove(prev); 
    } 
ft.addToBackStack(null); 

PicturePickerFragment pf = new PicturePickerFragment(); 
pf.show(); 

Может быть, вы можете обратиться к этой link, который является хорошим примером с сайта официального AndroidDeveloper в.

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