我有一个工作的DialogFragment,它使用内部类在一些对象上做一堆事情,设置菜单图标等。当我去Android Studio时,我意识到这是不正确的,我一直试图改变内心类是静态的。
这样做,我现在尝试使用onCreateDialog,按照Google docs,“doPositiveClick”和“doNegativeClick”,以便调用MainActivity可以对这些对象执行工作而不是执行它的片段
现在令我困惑的是,如何在片段中设置布局 - 我可以输入标题,信息和按钮:
return new AlertDialog.Builder(getActivity())
.setTitle(R.string.alert_title)
.setMessage(R.string.alert_message)
.setPositiveButton(R.string.set,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((MainActivity)getActivity()).doPositiveClick();
}
}
)
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((MainActivity)getActivity()).doNegativeClick();
}
}
)
但之前我正在进行如下布局:
final EditText input = new EditText(MainActivity.this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(20, 20);
input.setText("5");
input.setLayoutParams(lp);
input.setRawInputType(Configuration.KEYBOARD_QWERTY);
问题是,这在onCreateDialog中的位置是什么? Google文档显示了如何在对话框textView上设置文本,但这是在onCreateView()中。
我的困惑是google doc不同时做这两件事,即它没有显示如何同时设置自定义元素,并在调用MainActivity中设置正/负点击 - 或者如果确实如此,我很抱歉我现在无法看到它。
所以有人可以让我更清楚,使用上面的onCreateDialog,我怎么能有一个editText字段,默认值接受用户输入,然后将该输入返回到doPositiveClick()进行处理。
答案 0 :(得分:1)
DialogFragment可以使用两种方式:对话框或视图。
case1:使用DialogFragment
作为对话框。你必须实现onCreateDialog()
才能返回一个对话框。然后必须以下列方式显示对话框。看到例子:
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.alert_dialog_icon)
.setTitle(title)
.setPositiveButton(R.string.alert_dialog_ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doPositiveClick();
}
}
)
.setNegativeButton(R.string.alert_dialog_cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doNegativeClick();
}
}
)
.create();
}
}
创建并必须按以下方式显示对话框。不管是onCreateView()
是否实施,都要表现出这种方式。
// Create the fragment and show it as a dialog.
DialogFragment newFragment = MyDialogFragment.newInstance();
newFragment.show(getFragmentManager(), "dialog");
case2:用作视图(它不是对话框的功能)。这只是观点。你必须实现onCreateView()
并按以下方式显示对话框:
public static class MyDialogFragment extends DialogFragment {
static MyDialogFragment newInstance() {
return new MyDialogFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.hello_world, container, false);
View tv = v.findViewById(R.id.text);
((TextView)tv).setText("This is an instance of MyDialogFragment");
return v;
}
}
并且必须显示如下视图。与使用Fragment类相同。不管是onCreateDialog()
是否实施,都要表现出这种方式。
FragmentTransaction ft = getFragmentManager().beginTransaction();
DialogFragment newFragment = MyDialogFragment.newInstance();
ft.add(R.id.embedded, newFragment);
ft.commit();
<强>摘要:强>
在设计中,您可以一起实现onCreateView()
和onCreateDialog()
,并在此DialogFragment
生命周期中使用相同的源代码。如果屏幕较小,请使用DialogFragment
作为对话框。如果屏幕很大,请使用DialogFragment
作为视图(相同的常见Fragment类)。
请注意,使用正确的方式显示DialogFragment
适合onCreateView()
和onCreateDialog()
以防止例外。
答案 1 :(得分:0)
抱歉,我认为我的搜索工作已经筋疲力尽了,但是在我发布之后我才能修复它,将文本字段/布局放在构建器之前的onCreateDialog中,然后对该输入执行setView():
**LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(20, 20);
final EditText input = new EditText(getActivity());
input.setText("5");
input.setLayoutParams(lp);
input.setRawInputType(Configuration.KEYBOARD_QWERTY);**
// Use the Builder class for convenient dialog construction
return new AlertDialog.Builder(getActivity())
.setTitle(R.string.alert_title)
.setMessage(R.string.alert_message)
**.setView(input)**
.setPositiveButton(R.string.set,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((MainActivity)getActivity()).doPositiveClick();
}
}
)
现在唯一的问题是如何在用户输入后获取值?