18

これは私を2日間殺してきました。2番目のアクティビティBを呼び出すメインのアクティビティAがあります。アクティビティBは、ユーザーにリストビューを表示するだけです。リストビューの項目を押すと、いくつかの文字列がメインのアクティビティAに戻され、アクティビティBが終了します。

問題は、常に結果コード0を取得し、データバンドルがnullになることです。なぜこれが起こっているのか本当にわかりません。

これが私のコードです。

結果のアクティビティBを開始します。

Test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(recipeActivity.this, BrowseLoadRecipes.class);
            startActivityForResult(i, RECIPE_CHOOSER);
    }  
    });

これにより、2番目のアクティビティが正常に開始されます。アクティビティBはリストビューに表示され、アイテムをクリックすると、呼び出し元のアクティビティAにデータを送り返そうとしています。

現時点ではテキストがあるため、アクティビティBでは次のテキストを使用しました。

     lv.setOnItemClickListener(new OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> a, View v, int position, long id) {
        Bundle bundle = new Bundle();
        bundle.putString("TEXT", "Please work... pleeeeaasee");
        Intent mIntent = new Intent();
        mIntent.putExtras(bundle);
        setResult(RESULT_OK, mIntent);
        finish();
     }
     });

呼び出しアクティビティでは、次のようにリターンをリッスンしています。

protected void onActivityResult(int requestCode, int resultCode, 
        Intent data) { 
            switch(requestCode) { 
            //TODO
            case RECIPE_CHOOSER:
                Toast.makeText(getApplicationContext(), "In recipe return", Toast.LENGTH_SHORT).show();
                Toast.makeText(getApplicationContext(), "resultCode is " + String.valueOf(resultCode), Toast.LENGTH_SHORT).show();
                if (resultCode == RESULT_OK) {
                Bundle b = getIntent().getExtras();

                Toast.makeText(getApplicationContext(), "Returned " + b.getString("TEXT"), Toast.LENGTH_LONG).show();
                }
                if (resultCode == RESULT_CANCELED) {

                    }
                break;

                } 
            } 
        }

リクエストコードが正しく返されることがわかりますが、結果コードは常に0であり、データは常にnullです。

デバッグを実行しましたが、setResultがその役割を果たしており、バンドルには実際に渡したデータが含まれていますが、途中のある時点で失われています。

マニフェストに何か足りないものがありますか。これまでのところ、このプロジェクトの進捗状況は失われています。

4

3 に答える 3

15

リストアクティビティで、onItemClickListenerは、setResult行を次のように置き換えてみます。

if (getParent() == null) {
    setResult(Activity.RESULT_OK, data);
}
else {
    getParent().setResult(Activity.RESULT_OK, data);
}

データをバインドして結果を設定するために必要な親アクティビティがあるかどうか疑問に思っています。

于 2010-12-22T14:49:54.660 に答える
5

返されたデータについて。

あなたがやる:

Bundle b = getIntent().getExtras();

ただし、「getIntent()」は、このアクティビティを開始したインテントを返します。開始したアクティビティから返されたデータを結果として取得する場合は、に渡されるデータを取得するだけです。

protected void onActivityResult(int requestCode, int resultCode, Intent data)
于 2010-12-22T14:53:56.380 に答える
-3

あなたのコードは完全に機能しています........

in u Activity B
use
  setResult(0, mIntent);insted of setResult(RESULT_OK, mIntent);
in your Activity A:
use
case 0: insted case RECIPE_CHOOSER: and 
use System.out.println(b.getString("TEXT"));

次のように出力されます

働いてください...pleeeeaasee

于 2012-12-06T09:51:20.877 に答える