Android 如何将意向结果数据发送到后面的2个活动(跳过上一个活动)?

Android 如何将意向结果数据发送到后面的2个活动(跳过上一个活动)?,android,android-intent,Android,Android Intent,我创建了一个具有自定义建议功能的应用程序MainActivity将显示项目列表,并且还具有一个SearchView以从列表中搜索内容。当用户在搜索视图上放置内容时,将显示建议列表。当我单击其中一个建议时,它会将建议中的意图数据发送到可搜索的活动(SearchActivity)。在此活动中,它将检查意图是否来自ACTION\u SEARCH或ACTION\u VIEW。如果ACTION\u SEARCH,它将在此活动中显示查询。否则,它将发送打开DetailsActivity的意图。在Detail

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

下面是我的代码片段

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

您需要使用结果转发

main活动
使用
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()

而不是
setResult(RESULT\u OK,intent)使用
设置结果(12345,意图)
用于接收结果。删除else循环中的
finish()
方法,如果您正在完成活动,您将如何接收结果…它仍然不起作用。没有
finish()
,如果我单击“上一步”按钮而不是跳过它并转到“主要活动”,则DetailsActivity将返回到SearchActivity。Mr stackex结果将传递到您调用的活动…您正在调用
startActivityForResult()
来自
SearchActivity
您正在尝试从MainActivity获取结果..啊,没错。您知道如何将项目标识符发送到MainActivity,以便我可以将其从MainActivity中删除吗?注意:如果我在MainActivity中单击itemList中的项目,它将转到detailsActivity,如果我单击removeButton,该项目将被正常删除。问题是我通过SearchActivity从搜索建议转到DetailsActivity。谢谢,这让我有了一些见解,但既然我使用searchview从MainActivity启动SearchActivity,那么如何使用
startActivityForResult()
启动SearchActivity呢?