[英]Create similar Dialog when clicking different buttons
背景:我在活动中有4个按钮。
我要实现的目标:单击每个按钮将显示完全相同的对话框,其中包含5个项目。 单击列表中的项目会调用一个方法(在活动中定义),该方法带有两个参数:
这就是我想要实现的。 我认为这是一个很常见的情况,但是经过一段时间的搜索后我找不到任何解决方案。
我正在尝试遵循Android开发人员API指南: https : //developer.android.com/guide/topics/ui/dialogs.html
如果我按照指南进行操作,将会得到以下内容:
public class MyDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.dialog_title)
.setItems(R.array.dialog_array, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// something
}
});
return builder.create();
}
}
问题是我无法找到一种方法来传递一个值,该值指示在onClick
方法中单击了哪个按钮。 当然,一种方法是分别为每个按钮创建4个不同的DialogFragment,但我认为应该比这更干净。 我的第一个想法是创建一个DialogFragment工厂,并为工厂的不同输入返回不同的匿名DialogFragment,但是编译器抱怨说“碎片应该是静态的”,这显然是因为生命周期管理问题。 当我四处搜索时,我遇到了一些使用onCreateDialog
示例,我认为它们可以解决我的问题,但是显然不推荐使用此方法...
我现在不知道(除了创建4个不同的DialogFragment)。 任何帮助将不胜感激!
我有一个类似的东西,我使用一个静态方法解决了这个问题,该方法创建了一个对话框和一个用于检索结果的接口:
这是我的静态方法
public static void showGenericItemSelectorDialog(Activity activity, ArrayList<MyParams> items, final IReturnMyListItemToParent iReturnMyListItemToParent) {
final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setCancelable(true);
LayoutInflater inflater = activity.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.dialog_searchable_list, null); //or init it howerer you want, I have a custom layout
builder.setView(dialogView);
final Dialog dialog = builder.create();
/// omitted not useful code
Button myBtn= (Button) dialogView.findViewById(R.id.myBtn);
myBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//check which item has been clicked
iReturnMyListItemToParent.onResult(myClickedItem);
dialog.dismiss();
}
});
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialogInterface) {
iReturnMyListItemToParent.onResult(null);
dialog.dismiss();
}
});
dialog.show();
}
这是我的界面
public interface IReturnMyListItemToParent {
void onResult(MyItem item);
}
这就是我所说的:
RuntimeHelper.showGenericItemSelectorDialog(getActivity(), myParams, new IReturnMyListItemToParent() {
@Override
public void onResult(MyItem result) {
//do stuff with that result item clicked
}
});
这是一个示例,但是通过这种方式,您只需通过从每个按钮调用static方法就可以执行所需的任何操作。
这样,我将您的“将按钮传递给适配器”以及将结果传递给按钮。
如果要将按钮传递给方法,只需在构造函数中添加一个参数,即可将您指向单击的按钮:)
希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.