2015-04-02 39 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

相關問題