Android:监听自定义DialogFragment中的PositiveButton点击
Android: Listen to PositiveButton click in custom DialogFragment
我正在创建一个自定义 AlertDialog 来获取这样的项目列表...
对话框片段:
public class MultiListDialog extends DialogFragment {
private ArrayList<Integer> selectedItems = new ArrayList<>();
public MultiListDialog newInstance(Bundle args) {
MultiListDialog d = new MultiListDialog();
d.setArguments(args);
return d;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
selectedItems = new ArrayList();
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(getArguments().getString("title", ""))
.setMultiChoiceItems(getArguments().getCharSequenceArray("list"), null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
selectedItems.add(which);
} else if (selectedItems.contains(which)) {
selectedItems.remove(Integer.valueOf(which));
}
}
})
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
}
})
.setNegativeButton(R.string.cancel_only, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
dialog.cancel();
}
});
return builder.create();
}
public ArrayList<String> getSelectedItems() {
ArrayList<String> ret = new ArrayList<>();
for (int i=0; i<selectedItems.size(); i++)
ret.add(getArguments().getCharSequenceArray("list")[i].toString());
return ret;
}
}
Activity:
Bundle args = new Bundle();
args.putString("title", "My Title");
args.putCharSequenceArray("list", arrayList.toArray(new CharSequence[arrayList.size()]));
DialogFragment fragment = new MultiListDialog().newInstance(args);
fragment.show(getFragmentManager(), "my_frag");
我怎样才能在单击“确定”时检索选定的项目?我尝试添加接口和抽象函数,但无法正常工作。
可以使用DialogFragment#getActivity()
方法并将其转换为您的收听界面。您也可以将 activity 作为侦听器传递给对话片段,并在 onDestroy()
内将其设为 null
我正在创建一个自定义 AlertDialog 来获取这样的项目列表...
对话框片段:
public class MultiListDialog extends DialogFragment {
private ArrayList<Integer> selectedItems = new ArrayList<>();
public MultiListDialog newInstance(Bundle args) {
MultiListDialog d = new MultiListDialog();
d.setArguments(args);
return d;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
selectedItems = new ArrayList();
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(getArguments().getString("title", ""))
.setMultiChoiceItems(getArguments().getCharSequenceArray("list"), null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
selectedItems.add(which);
} else if (selectedItems.contains(which)) {
selectedItems.remove(Integer.valueOf(which));
}
}
})
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
}
})
.setNegativeButton(R.string.cancel_only, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
dialog.cancel();
}
});
return builder.create();
}
public ArrayList<String> getSelectedItems() {
ArrayList<String> ret = new ArrayList<>();
for (int i=0; i<selectedItems.size(); i++)
ret.add(getArguments().getCharSequenceArray("list")[i].toString());
return ret;
}
}
Activity:
Bundle args = new Bundle();
args.putString("title", "My Title");
args.putCharSequenceArray("list", arrayList.toArray(new CharSequence[arrayList.size()]));
DialogFragment fragment = new MultiListDialog().newInstance(args);
fragment.show(getFragmentManager(), "my_frag");
我怎样才能在单击“确定”时检索选定的项目?我尝试添加接口和抽象函数,但无法正常工作。
可以使用DialogFragment#getActivity()
方法并将其转换为您的收听界面。您也可以将 activity 作为侦听器传递给对话片段,并在 onDestroy()