我使用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类型?怎么解决?
答案 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();
}