2015-07-21 60 views
0

我正在構建一個Android應用程序,並且該應用程序有一個開放部分和一些需要驗證的操作。在Android中調用登錄對話框的最佳實踐

我所做的是當用戶點擊一個需要驗證的操作時,顯示一個登錄對話框,用戶可以登錄並且登錄將有效30分鐘。

所以我有一個片段中的3個按鈕,當點擊時檢查用戶是否登錄,如果不調用登錄對話框。

問題是:如何識別單擊按鈕,因爲當用戶單擊按鈕並且未通過身份驗證時,我只是創建登錄對話框並將setTargetFragment設置爲調用者片段,這與3鈕釦。

有沒有辦法將參數傳遞給登錄對話框來識別?

的代碼如下:

當用戶點擊該按鈕:

final DialogFragment loginDialog = new LoginDialogFragment(); 
loginDialog.setTargetFragment(this, 0); 

btnAprovar.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (!LoginService.getInstance().isLoggedOn()) { 
      loginDialog.show(getFragmentManager(), "Login"); 
     } 
    } 
}); 

,並在對話框:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    View v = inflater.inflate(R.layout.fragment_login_dialog, null); 
    final EditText txtUser = (EditText) v.findViewById(R.id.txtUsername); 
    final EditText txtPwd = (EditText) v.findViewById(R.id.txtPassword); 
    builder.setView(v) 
      .setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        DoLogin dl = new DoLogin(); 
        dl.execute(txtUser.getText().toString(), txtPwd.getText().toString()); 
       } 
      }) 
      .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        LoginDialogFragment.this.getDialog().cancel(); 
       } 
      }); 
    return builder.create(); 
} 

private void DoPost(Boolean _result) { 
    if (_result.equals(true)) { 
     ((PublicacaoDetailFragment) this.getTargetFragment()).onAuthTrue(); 
    } else { 
     ((PublicacaoDetailFragment) this.getTargetFragment()).onAuthFalse(); 
    } 
} 

什麼是做到這一點的最佳做法?

感謝

+0

我很困惑。你想知道哪個按鈕導致對話框出現? –

+0

是的,所以在登錄對話框的回調中,我可以繼續執行正確的操作...或者更好的方式進行登錄 – RLuceac

+0

爲什麼你不向LoginDialogFragment.show方法傳遞額外的參數?你可以傳入按鈕的int資源ID,或者一個枚舉或一個String ......真的...... –

回答

1

要擴展@ Rodolfo的答案,您應該在這裏使用裝飾器/包裝器模式。

而不是擴展DialogFragment,在你的LoginDialogFragment中,你應該只有一個DialogFragment的實例變量。這樣,您可以擁有一個名爲show(String buttonDescription)的方法。在你自己的show(...)方法中,你可以調用DialogFragment的show()方法。

0

因爲你是在一類自己的延伸DialogFragment,你有兩個選擇:

  • 定義一個變量(以getter和/或setter)您的自定義對話框類中。在您的登錄按鈕onClick方法中,在致電Dialogshow()之前,請爲此變量調用setter並傳遞v.getId()。在這種情況下,v是與您添加了OnClickListener的組件關聯的View
  • 將您的按鈕View的id在Bundle之內傳遞到DialogFragment