簡體   English   中英

單擊不同的按鈕時創建類似的對話框

[英]Create similar Dialog when clicking different buttons

背景:我在活動中有4個按鈕。

我要實現的目標:單擊每個按鈕將顯示完全相同的對話框,其中包含5個項目。 單擊列表中的項目會調用一個方法(在活動中定義),該方法帶有兩個參數:

  1. 一個值,指示最初單擊了四個按鈕中的哪個
  2. 指示選擇列表中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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM