2

次のことを想定しましょう。

Activity A calls Search Manager
User searches, and search results are displayed in Activity B
User clicks on a list item in Activity B 
App switches back to Activity A

Search Managerのインテントがないため、アクティビティBからアクティビティAへのこのコールバックを処理できません(私は思いますか?)。

検索マネージャーに電話する(アクティビティA)

public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
        case R.id.add_symbol:
            onSearchRequested(); //result of search will show Activity B
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

ユーザーがリストアイテムを選択したら、アクティビティAに戻ります

listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                Quote myQuote = new Quote();
                myQuote.name = (companies.get(position).name);
                myQuote.symbol = (companies.get(position).symbol);

                //TODO: add new quote to master quote list in Main
                //TODO: serialize in Main
                //TODO: go back to last activity

                Intent myIntent = new Intent(getApplicationContext(), Main.class);
                startActivityForResult(myIntent, PICK_COMPANY_REQUEST);
            }
        });

アクティビティAで、コールバックを処理します。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == PICK_COMPANY_REQUEST) {
            if (resultCode == RESULT_OK) {
                Toast toast = Toast.makeText(getApplicationContext(), "Stock added", Toast.LENGTH_SHORT);
                toast.show();
            }
        }
    }

PICK_COMPANY_REQUESTがコールバックに送信されることはありません。どうしてこれなの?Search ManagerにはアクティビティBではなくインテントがあるためだと思います。これが確実に呼び出されるようにするにはどうすればよいですか?

onActivityResult()が呼び出されることはありません。なんで?

4

2 に答える 2

5

呼び出し元のアクティビティへのAndroidonSearchRequested()コールバックで同じ問題だと思うものに対する回答を投稿しました

onActivityResultアクティビティAが結果の検索アクティビティを開始していないため、Skytheは呼び出されません。

これを回避するために、アクティビティAを(マニフェストで)検索可能なアクティビティとしても定義し、検索インテントを受け取り、でアクティビティBを手動で起動startActivityForResultし、クエリを渡して、アクティビティBに通常どおり検索を処理させます。

上記のリンクで私の回答を見ることができます。または、このブログ投稿に詳細な記事があります。

于 2011-05-11T18:16:57.047 に答える
0

onclickListenerでメインアクティビティの新しいインテントを呼び出す必要があるかどうかは本当に疑問です。アクティビティはすでにスタックにあるので、それを終了することができます

listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                Quote myQuote = new Quote();
                myQuote.name = (companies.get(position).name);
                myQuote.symbol = (companies.get(position).symbol);

                //TODO: add new quote to master quote list in Main
                //TODO: serialize in Main
                //TODO: go back to last activity

               //You need to use setresult here and pass the intent
                setResult(RESULT_OK, myIntent );
                finish();
            }
        });
于 2010-08-30T06:28:53.713 に答える