9

アプリが正常に機能するには、ユーザー名を追加する必要があります。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);

役に立たない。

4

2 に答える 2

12

この方法を試しましたか:

Intent intent = new Intent(getActivity(), Editprofile.class);
startActivityForResult(intent, 0);

Intent オブジェクトを作成するときは、アクティビティ自体への参照を使用する代わりに、BaseContext を使用します。

于 2012-12-26T09:43:56.110 に答える
7

使用する

Intent intent = new Intent(getActivity(), Editprofile.class);
getActivity().startActivityForResult(intent, 0);

働いた!

于 2012-12-26T11:24:29.443 に答える