问题
I am trying to create a simplistic dialog similar to a DatePickerDialog
. The Dialog
that I am creating should provide the user with an array of images from which they can select.
I believe I have managed to create the array and add the correct images to it, the problem I am running into now is how to get the Dialog
to show up? What should I be returning?
I have looked into AlertDialogs
and such, but I am not sure as to what to do to implement them.
UPDATED: FIXED PROBLEM, CODE SHOWN BELOW IS FUNCTIONING
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);
}
}
THE FRAGMENT WILL BE USED LIKE THIS
<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" />
回答1:
If the activity in which you want to open the DialogFragment
extends FragmentActivity
, you should execute:
PicturePickerFragment dialog = new PicturePickerFragment();
dialog.show(getSupportFragmentManager(), "YourDialog");
Also you need to inflate your dialog layout file in the method onCreateDialog
of your dialog fragment class.
Using AlertDialog.Builder
you can achieve all this easily, e.g.
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();
There are many examples on http://developer.android.com/reference/android/app/DialogFragment.html
回答2:
There are different ways you can create your dialog either using OnCreateView
method or using OnCreateDialog
method if you are extending the DialogFragment
class and so the implementation goes in a different way for both.
You should return your Dialog
instance from OnCreateDialog
method.
How to show the dialog in a 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();
May be you can refer to this link which is a nice example from official AndroidDeveloper's site.
来源:https://stackoverflow.com/questions/22214243/custom-dialog-fragment