如何将意图结果数据发送到2活动后面(跳过以前的活动)?

时间:2015-04-02 06:18:37

标签: android android-intent

我创建了一个具有自定义建议功能的应用。 MainActivity将显示项目列表,并且还有一个SearchView来搜索列表中的内容。当用户在SearchView上放置内容时,将显示建议列表。当我单击其中一个建议时,它会将建议中的意图数据发送到可搜索的活动(SearchActivity)。在此活动中,它会检查Intent是来自ACTION_SEARCH还是ACTION_VIEW。如果ACTION_SEARCH,则会在此活动中显示查询。否则,它会发送Intent以打开DetailsActivity。在DetailsActivity中,用户可以删除此项。当用户点击删除按钮时,DetailsACtivity会将意图结果发送到MainActivity,跳过SearchActivity(我在SearchActivity发送意图时使用完成以打开DetailsActivity)。我的代码没有显示错误,但我的项目没有被删除,为什么意图结果不起作用?

以下是我的代码段

MainActivity.java

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch(requestCode) {
            case 12345:
                if(resultCode == RESULT_OK) {
                    int pos = data.getIntExtra("DELETE", -1);
                    itemList.remove(pos);
                    mAdapter.notifyItemRemoved(pos);
                }
                break;
        }
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_search, menu);
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    }

SearchActivity.java

    private void handleIntent(Intent intent) {
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
            String query = intent.getStringExtra(SearchManager.QUERY);
            txtQuery.setText("Search Query: " + query);
        } else if (Intent.ACTION_VIEW.equals(intent.getAction())) {
            Intent detail = new Intent(this, DetailsActivity.class);

            int pos = intent.getIntExtra(SearchManager.EXTRA_DATA_KEY);
            intent.putExtra("POS", pos);
            startActivityForResult(detail, 12345);
            finish();
        }
    }

DetailsActivity.java

        removeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int pos = getIntent().getIntExtra("POS", -1);
                Intent intent = new Intent();
                intent.putExtra("DELETE", pos);
                setResult(RESULT_OK, intent);
                finish();
            }
        });

1 个答案:

答案 0 :(得分:0)

您需要使用结果转发。

MainActivity使用SearchActivity

启动startActivityForResult()

SearchActivity应该像这样启动DetailsActivity

Intent intent = new Intent(this, DetailsActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(intent);
finish();

这告诉框架DetailsActivity的结果应该返回MainActivity

注意您使用DetailsActivity启动startActivity()而使用startActivityForResult()启动 ;