アプリが正常に機能するには、ユーザー名を追加する必要があります。mainActivity は、データベースから取得したユーザー名を一番上に表示します。mainActivity には、startActivityForResult() メソッドを介して「addusername」アクティビティにつながるボタンもあります。ユーザーが実際にユーザー名を入力すると、メイン アクティビティのユーザー名のみが更新されて表示されます。「addusername」アクティビティには、ユーザー名を追加して実行する送信ボタンがありsetResult(RESULT_OK);
ます。「addusername」ボタンをクリックしてユーザー名を入力すると、すべて正常に機能します。
ここで、データベースにユーザー名が存在しない場合にのみ、アプリの起動時に表示されるダイアログを 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();
}
ダイアログのコードは次のとおりです。
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();
}
}
ダイアログが startActivityForResult() メソッドを呼び出さないため、これが起こっていることを理解しています。しかし、次のようにコードを変更しても、
Intent intent = new Intent(getActivity().getBaseContext(), Editprofile.class);
startActivityForResult(intent, 0);
それでも役に立ちません。おそらく、 onActivityResult() メソッドが startActivityForResult() が呼び出されたのと同じクラスにないためですが、その後の取得方法がわかりません。
編集1:使ってみた
Intent intent = new Intent(getActivity(), Editprofile.class);
startActivityForResult(intent, 0);
役に立たない。