krt*_*ush 7 java android android-dialog
我的应用需要添加用户名才能正常运行.mainActivity在顶部显示它从数据库中检索的用户名.mainActivity还有一个按钮,通过startActivityForResult()方法导致'addusername'活动; 当用户实际输入用户名时,只有主活动上的用户名才会刷新并显示."addusername"活动上有一个提交按钮,用于添加用户名,setResult(RESULT_OK);
如果通过单击"addusername"按钮输入用户名,则Everything正常工作.
现在,我在mainActivity中添加了一个对话框,只有在数据库中没有用户名时才会启动应用程序.对话框提供了添加用户名的选项,如果单击该用户名,则会导致"addusername"活动.但按下"提交"按钮后,mainActivity会被调用,但用户名不会刷新(但数据库确实会更新)
以下是"addusername"活动的代码:
public void submitusername(View view) {
userdatabase name = new userdatabase(this);
name.open();
String user = name.getusername();
name.close();
EditText cinone = (EditText) findViewById(R.id.username);
username = cinone.getText().toString();
if(user.equals("")) {
userdatabase entry = new userdatabase(Editprofile.this);
entry.open();
entry.createEntry(username, null, null, null);
entry.close();
Context context = getApplicationContext();
CharSequence text = "Added new user!";
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
else {
userdatabase update = new userdatabase(Editprofile.this);
update.open();
update.updateUsername(username);
update.close();
Context context = getApplicationContext();
CharSequence text = "Username updated!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
setResult(RESULT_OK);
finish();
}
Run Code Online (Sandbox Code Playgroud)
这是Dialog的代码:
public class NouserFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.nouseralert)
.setPositiveButton(R.string.add, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent intent = new Intent(getActivity().getBaseContext(), Editprofile.class);
startActivity(intent);
}
})
.setNegativeButton(R.string.ignore, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
return builder.create();
}
}
Run Code Online (Sandbox Code Playgroud)
我理解这种情况正在发生,因为Dialog不会调用startActivityForResult()方法.但即使我改变我的代码,像这样:
Intent intent = new Intent(getActivity().getBaseContext(), Editprofile.class);
startActivityForResult(intent, 0);
Run Code Online (Sandbox Code Playgroud)
它仍然无济于事.可能是因为onActivityResult()方法不属于调用startActivityForResult()的同一个类,但我不知道如何获取.
编辑1:尝试使用
Intent intent = new Intent(getActivity(), Editprofile.class);
startActivityForResult(intent, 0);
Run Code Online (Sandbox Code Playgroud)
没用
vch*_*ter 11
你试过这种方式:
Intent intent = new Intent(getActivity(), Editprofile.class);
startActivityForResult(intent, 0);
Run Code Online (Sandbox Code Playgroud)
创建Intent对象时,使用BaseContext,而不是使用对活动本身的引用.
运用
Intent intent = new Intent(getActivity(), Editprofile.class);
getActivity().startActivityForResult(intent, 0);
Run Code Online (Sandbox Code Playgroud)
成功了!
| 归档时间: |
|
| 查看次数: |
8477 次 |
| 最近记录: |