2010-06-29 75 views
0

我使用警報對話框作爲登錄。因此,在關閉此對話框後,對話框show()中分配的任何值都將丟失。如何找回這個值?我的代碼如下想要在關閉警報對話框後取回任何值

private void accessPinCode() 
{ 
    LayoutInflater factory = LayoutInflater.from(this); 
    final View textEntryView = factory.inflate(R.layout.dialog_login, null); 
    AlertDialog.Builder alert = new AlertDialog.Builder(this);     
    alert.setTitle("Title"); 
    alert.setMessage("Enter Pin :");     
    alert.setView(textEntryView);  

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) {   
      EditText mUserText; 
      mUserText = (EditText) textEntryView.findViewById(R.id.txt_password); 
      //String strPinCode = mUserText.getText().toString(); 
      Log.d(TAG, "Pin Value 1 : " + mUserText.getText().toString());    
      strPIN = mUserText.getText().toString(); 
      Log.d(TAG, "strPIN inside accessPinCode : " + strPIN); 
      fPIN= checkPINCode(); 
      Log.d(TAG, "fPass : " + fPIN); 


      return;     
     } 
    }); 

    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 
      return; 
     } 
    }); 

    alert.show(); 
    Log.d(TAG, "strPIN outside Alert Show : " + strPIN); 
} 

基於我的代碼,strPIN和FPIN值都將丟失。我想在accessPinCode函數外部使用這些值。如何獲得?

其實,我在tabchanged事件中調用這個函數。如果登錄通過,用戶可以訪問另一個選項卡。但是,在點擊AlertDialog的確定按鈕之前,全部已經在製表符更改的事件中工作。我的標籤事件如下

tabHost.setOnTabChangedListener(new OnTabChangeListener() { 

      public void onTabChanged(String tabId) { 
       // TODO Auto-generated method stub 

       if (tabId.equals("index")) 
       { 
        tabHost.setCurrentTab(1); 
        accessPinCode(); 
       } 
       Log.d(TAG, "tabId : "+ tabId);  
      } 
     }); 

是否有任何類型的適合於登錄的對話框?怎麼解決?

+0

小建議:使用'android.R.string.ok'和'android.R.string.cancel'來代替「Ok」和「Cancel」。 – Felix 2010-06-29 10:44:24

+0

謝謝。我將 – soclose 2010-06-29 13:29:49

+0

最後,我沒有在Tab OnChanged事件中調用accessPinCode,而是將所有的alertDialog創建在這個事件中。因爲如果登錄通過,我想設置當前選項卡。謝謝你們。 – soclose 2010-06-30 03:00:56

回答

1

編輯:在你的消極/積極的按鈕,你必須調用周圍類的功能,設置這兩個參數與AlertDialog收集的值。

類似:

private String mStrPin; 
private float mFPin; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

...

alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
      String strPin = "1234"; 
      float fPin = 1.234f; 
      public void onClick(DialogInterface dialog, int which) { 
       loggedIn(strPin, fPin); 
      } 
    } 

...

} 
private void loggedIn(String strPin, float fPin) { 
    mStrPin = strPin; 
    mFPin = fPin; 
} 
+0

第一部分爲+1,最後部分爲-1(你是否認真鼓勵?)。 – Felix 2010-06-29 10:43:35

0

一個簡單的例子:

public interface TextListener { 
    void onPositiveResult(CharSequence text); 
} 

public static AlertDialog getTextDialog(Context ctx, 
     final TextListener listener) { 
    View view = LayoutInflater.from(ctx).inflate(R.layout.dialog, null); 
    final TextView tv = (TextView) view.findViewById(R.id.tv); 
    AlertDialog.Builder builder = new AlertDialog.Builder(ctx); 
    builder.setView(view); 
    // 
    builder.setPositiveButton(android.R.string.ok, new OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      listener.onPositiveResult(tv.getText()); 
     } 
    }); 
    builder.setNegativeButton(android.R.string.cancel, null); 
    return builder.create(); 
} 
+0

@ alex,請重新檢查我的帖子。我再次編輯。 – soclose 2010-06-30 02:00:57