3

我正在尝试创建一个类似于DatePickerDialog的简单对话框。我正在创建的Dialog应该为用户提供一组可供用户选择的图像。定制对话框片段

我相信我已经设法创建了阵列并向它添加了正确的图像,我现在遇到的问题是如何让Dialog显示出来?我应该返回什么?

我已经调查过AlertDialogs等,但我不知道该怎么做才能实现它们。

更新:固定的问题,CODE下面显示的是运作

PICTURE 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(); 
} 

} 

FOR REFERENCE

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); 
} 
} 

片段将被用来LIKE本

<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

请许多例子指http://developer.android.com/reference/android/app/DialogFragment.html这个链接,并张贴问题 –

回答

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类等的实施中去两个不同的方式你的对话中使用。

您应该从OnCreateDialog方法中返回Dialog实例。

如何显示在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的网站一个很好的例子。