Android DialogFragment :使用具有自定义布局的 AlertDialog
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10579545/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
DialogFragment : Using AlertDialog with custom layout
提问by Binoy Babu
I'm rewriting my application with Fragments API
support. In the original application I have an AlertDialog
that is created like this :
我正在Fragments API
支持下重写我的应用程序。在原始应用程序中,我有一个AlertDialog
像这样创建的:
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.button_dialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);
ListView mListView = (ListView) view.findViewById(R.id.mblist);
builder.setTitle(getString(R.string.sysinfo)).setNeutralButton(
getString(R.string.okay), null);
Cursor dcursor = propManager.propCursor();
if (dcursor.moveToFirst()) {
startManagingCursor(dcursor);
String[] from = { Constants.NAME_DET,
Constants.VALUE_DET };
int[] to = { R.id.mbname, R.id.mbvalue };
SimpleCursorAdapter dadapter = new SimpleCursorAdapter(this,
R.layout.info_list_row, dcursor, from, to);
mListView.setAdapter(dadapter);
}
final Dialog dialog = builder.create();
dialog.show();
How can I display the same dialog via a DialogFragment? I have read the documentation but have trouble figuring out how to proceed with this.
如何通过 DialogFragment 显示相同的对话框?我已阅读文档,但无法弄清楚如何进行此操作。
回答by Binoy Babu
I'm surprised that nobody answered. This is the solution:
我很惊讶没有人回答。这是解决方案:
public class PropDialogFragment extends DialogFragment {
private PropDialogFragment() { /*empty*/ }
/** creates a new instance of PropDialogFragment */
public static PropDialogFragment newInstance() {
return new PropDialogFragment();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
//getting proper access to LayoutInflater is the trick. getLayoutInflater is a //Function
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.my_dialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(view);
builder.setTitle(getActivity().getString(R.string.sysinfo)).setNeutralButton(
getActivity().getString(R.string.okay), null);
return builder.create();
}
}
You can show the dialog using :
您可以使用以下方法显示对话框:
private void showDialog() {
// DialogFragment.show() will take care of adding the fragment
// in a transaction. We also want to remove any currently showing
// dialog, so make our own transaction and take care of that here.
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
// Create and show the dialog.
DialogFragment newFragment = PropDialogFragment.newInstance();
newFragment.show(ft, "dialog");
}
回答by user2162545
Basically you can just show your Fragment like this:
基本上你可以像这样显示你的片段:
SherlockDialogFragment newFragment = new TimePickerFragment();
newFragment.show(getActivity().getSupportFragmentManager(), "timePicker");
And this would be a simple TimePickerFragment:
这将是一个简单的 TimePickerFragment:
public class TimePickerFragment extends SherlockDialogFragment implements TimePickerDialog.OnTimeSetListener{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity()));
}
}