关闭Alert Dialog后想要取回任何值

时间:2010-06-29 09:01:12

标签: android alertdialog

我使用Alert Dialog作为Login。因此,关闭此对话框后,对话框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的Ok按钮之前,所有已经在tab更改过的事件中已经工作了。我的标签事件如下所示

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 );    
            }
        });

是否有适合登录的Dialog类型?怎么解决?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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();
}