[英]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.