2015-04-02 46 views
0

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

下面是我的代码片段

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

代替'setResult(RESULT_OK,intent);''setResult(12345,intent);'接收结果。 – bGorle 2015-04-02 06:33:32

+0

它不起作用 – stackex 2015-04-02 06:38:35

+1

在else循环中删除'finish()'方法,如果您正在完成活动,您将如何收到结果... – bGorle 2015-04-02 06:41:37

回答

0

您需要使用结果转发。

MainActivity推出SearchActivity使用startActivityForResult()

SearchActivity应该推出DetailsActivity这样的:

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

这说明,从DetailsActivity shouldBe这样的结果返回给MainActivity框架。

注意您在使用startActivity()使用startActivityForResult()推出DetailsActivity;

+0

谢谢,它给了我深刻的见解,但是我如何使用'startActivityForResult()'启动SearchActivity,因为我使用searchview从MainActivity启动它? – stackex 2015-04-06 01:52:10

相关问题