在 Activity 中为 DialogFragment 设置侦听器
Setting a listener in Activity for DialogFragment
我正在尝试在我的 DialogFragment(它有 3 个 numberPicker 小部件元素)上的 Activity 中实现一个侦听器,它将用于在 Activity 的 textView 中设置值,但我没有我不想让这个 Fragment class 成为 Activity 的内部 class 并在 OK 按钮的 OnClickListener 中设置文本视图,因为在这种情况下我必须使我的视图静态,这是不可取的.我知道 NumberPicker class 有一个 onValueChange 侦听器,但我如何设置一个从 3 个选择器元素获取值的侦听器。在 activity 中实现此类侦听器的任何帮助将不胜感激。
public class PickerDialog extends DialogFragment {
NumberPicker numberPicker;
NumberPicker numberPicker2;
NumberPicker numberPicker3;
public static PickerDialog newInstance() {
PickerDialog frag = new PickerDialog ();
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View child = getActivity().getLayoutInflater().inflate(R.layout.dialog, null);
numberPicker = child.findViewById(R.id.numberPicker1);
numberPicker2 = child.findViewById(R.id.numberPicker2);
numberPicker3 = child.findViewById(R.id.numberPicker3);
numberPicker.setMinValue(0);
numberPicker.setMaxValue(59);
numberPicker3.setMinValue(0);
numberPicker3.setMaxValue(59);
numberPicker2.setMinValue(0);
numberPicker2.setMaxValue(59);
AlertDialog.Builder builder;
builder = new AlertDialog.Builder(getActivity(), R.style.Theme_Material_Dialog_Alert);
builder.setTitle("Choose Value");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
});
builder.setView(child);
return builder.create();
}
}
您可以创建一个 Listener
接口,该接口在 Activity 中实现并通过引用 Activity 在 DialogFragment
中使用。类似于:
public class MyActivity extends Activity implements NumberPickerListener {
...
@Override
public void onValuesPicked(int first, int second, int third) {
//Do work here.
}
...
}
界面:
interface NumberPickerLisener {
void onValuesPicked(int first, int second, int third);
}
在你的片段中:
public class PickerDialog extends DialogFragment {
NumberPickerListener listener;
...
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View child = getActivity().getLayoutInflater().inflate(R.layout.dialog, null);
listener = (MyActivity)getActivity();
...
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
listener.onValuesPicked(numberPicker.getValue(), numberPicker2.getValue(), numberPicker3.getValue());
dismiss();
}
});
...
}
}
我正在尝试在我的 DialogFragment(它有 3 个 numberPicker 小部件元素)上的 Activity 中实现一个侦听器,它将用于在 Activity 的 textView 中设置值,但我没有我不想让这个 Fragment class 成为 Activity 的内部 class 并在 OK 按钮的 OnClickListener 中设置文本视图,因为在这种情况下我必须使我的视图静态,这是不可取的.我知道 NumberPicker class 有一个 onValueChange 侦听器,但我如何设置一个从 3 个选择器元素获取值的侦听器。在 activity 中实现此类侦听器的任何帮助将不胜感激。
public class PickerDialog extends DialogFragment {
NumberPicker numberPicker;
NumberPicker numberPicker2;
NumberPicker numberPicker3;
public static PickerDialog newInstance() {
PickerDialog frag = new PickerDialog ();
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View child = getActivity().getLayoutInflater().inflate(R.layout.dialog, null);
numberPicker = child.findViewById(R.id.numberPicker1);
numberPicker2 = child.findViewById(R.id.numberPicker2);
numberPicker3 = child.findViewById(R.id.numberPicker3);
numberPicker.setMinValue(0);
numberPicker.setMaxValue(59);
numberPicker3.setMinValue(0);
numberPicker3.setMaxValue(59);
numberPicker2.setMinValue(0);
numberPicker2.setMaxValue(59);
AlertDialog.Builder builder;
builder = new AlertDialog.Builder(getActivity(), R.style.Theme_Material_Dialog_Alert);
builder.setTitle("Choose Value");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
});
builder.setView(child);
return builder.create();
}
}
您可以创建一个 Listener
接口,该接口在 Activity 中实现并通过引用 Activity 在 DialogFragment
中使用。类似于:
public class MyActivity extends Activity implements NumberPickerListener {
...
@Override
public void onValuesPicked(int first, int second, int third) {
//Do work here.
}
...
}
界面:
interface NumberPickerLisener {
void onValuesPicked(int first, int second, int third);
}
在你的片段中:
public class PickerDialog extends DialogFragment {
NumberPickerListener listener;
...
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View child = getActivity().getLayoutInflater().inflate(R.layout.dialog, null);
listener = (MyActivity)getActivity();
...
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
listener.onValuesPicked(numberPicker.getValue(), numberPicker2.getValue(), numberPicker3.getValue());
dismiss();
}
});
...
}
}