【问题标题】:How do I send Intent Result Data to 2 Activity behind (skipping previous activity)?如何将意图结果数据发送到后面的 2 个活动(跳过以前的活动)?
【发布时间】:2015-04-02 23:58:30
【问题描述】:

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

下面是我的代码sn-p

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();
            }
        });

【问题讨论】:

  • 而不是setResult(RESULT_OK, intent); 使用setResult(12345, intent); 来接收结果。
  • 删除 else 循环中的 finish() 方法,如果您正在完成活动,您将如何收到结果...
  • 还是不行。如果没有finish(),如果我单击返回按钮而不是跳过它并转到 MainActivity,DetailsActivity 将返回 SearchActivity。
  • 先生 stackex 结果将被传递到您调用的活动...您正在从 SearchActivity 调用 startActivityForResult() 并且您正在尝试从 MainActivity 获取结果..
  • 啊,没错。您知道如何将项目标识符发送到 MainActivity 以便我可以从 MainActivity 中删除它吗?注意:如果我在 MainActivity 中点击 itemList 中的项目,它将转到 detailsActivity,如果我点击 removeButton,该项目将被优雅地删除。我通过SearchActivity从搜索建议转到DetailsActivity的问题。

标签: android android-intent


【解决方案1】:

您需要使用结果转发。

MainActivity 使用 startActivityForResult() 启动 SearchActivity

SearchActivity 应该像这样启动DetailsActivity

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

这告诉框架应该将来自DetailsActivity 的结果返回给MainActivity

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

【讨论】:

  • 谢谢,它给了我洞察力,但是我如何使用 startActivityForResult() 启动 SearchActivity,因为我使用 searchview 从 MainActivity 启动它?
猜你喜欢
  • 1970-01-01
  • 2016-05-19
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多