1

我有一個活動「SearchActivity」,它擴展了SherlockActivity。在這個活動中,我有一個選項菜單,它有一個搜索欄和一個「開始」按鈕。在搜索欄中輸入的數據必須傳遞給先前的活動「NavigationActivity」,它擴展了SherlockMapActivity。onActivityResult()方法沒有在延伸SherlockMapActivity的活動中調用

這是我SearchActivity部分代碼:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 

     case R.id.go: 
      Intent intent = new Intent(); 
      intent.putExtra("SearchText", enteredText); 
      setResult(200, intent); 
      startActivityForResult(intent, 100); 
      finish(); 
      break; 

    } 
    return true; 
} 

這是NavigationActivity的onActivityResult()方法:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    System.out.println("In onActivityResult method"); 
    if(data != null && resultCode == 200 && requestCode == 100) { 
     String text = data.getStringExtra("SearchText"); 
     System.out.println("The data is: " + text); 
     Toast.makeText(this, "The text entered in the search bar is: " + text, Toast.LENGTH_LONG).show(); 
    }  
} 

的問題是onActivityResult()方法從未得到在NavigationActivity中調用。在按下「Go」按鈕時,我可以從SearchActivity導航到NavigationActivity,但無法獲取NavigationActivity中的數據。你能在這方面幫助我嗎?

謝謝。

+0

http://forum.processing.org/topic/startactivityforresult-and-onactivityresult-not-returning-any-value – Nermeen

回答

1

請參閱下面的示例代碼並相應地修改您的代碼。

導航活動

public class NavigationActivity extends Activity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.navigationActivity); 

    Button btnTest = (Button) findViewById(R.id.button1); 
    btn1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) 
        { 
      Intent intent = new Intent(Launcher.this,Activity2.class); 
      startActivityForResult(intent, 100); 
     } 

    }); 

} 

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

    if(resultCode == 200) 
    { 

     String enteredText = "no action defined for this requestcode :"+resultCode; 
     if(requestCode == 100) 
     { 
      enteredText = (String)data.getStringExtra("SearchText"); 

     } 
     Toast.makeText(Launcher.this,enteredText,Toast.LENGTH_SHORT).show(); 
    } 
    else 
    { 
     Toast.makeText(Launcher.this,"some exception occurred",Toast.LENGTH_SHORT).show(); 
    } 
} 
} 

搜索活動

public class SearchActivity extends Activity{ 


@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.search); 

    Button btnGO = (Button)findViewById(R.id.buttonGo); 
    btnGO .setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(); 
      EditText edtSearchBar = (EditText)findViewById(R.id.tvTest); 

       intent.putExtra("SearchText", edtSearchBar .getText().toString()); 

      setResult(200,intent); 
      finish(); 

     } 
    }); 
} 
} 
+0

謝謝你的回覆。我試圖刪除完成(),但它仍然無法正常工作。它的導航返回到NavigationActivity,但onActivityResult()仍然沒有在NavigationActivity中調用。 –

+0

謝謝你的回覆。我試過了,它工作。我可以將我在SearchActivity中輸入的數據顯示在NavigationActivity中。 –

+0

我的答案沒有工作? –

1

不它需要是周圍的其他方式?

根據我的理解,您需要撥打startActivityForResult(..)NavigationActivity而不是SearchActivity

NavigationActivity

Intent intent= new Intent(context, SearchActivity.class); 
startActivityForResult(intent, 200); 

然後在SearchActivity通話

setResult(..); 
finish(); 

得到的結果返回給調用活動,並觸發onActivityResult(..)方法。

看到這個related answer

+0

謝謝你的回覆。我將嘗試在SearchActivity中調用NavigationActivity中的startActivityForResult()以及setResult(),finish()和onActivityResult()方法。但是,請問能否告訴我在NavigationActivity的哪個地方應該調用startActivityForResult()? –

+0

你的應用程序的工作原理並不十分清楚。在你的問題中,你寫到NagivationActivity是「之前的活動」。這表明SearchActivity是由NavigationActivity啓動的。如果沒有,請描述您的應用程序的工作流程。 –

+0

是的,SearchActivity僅由NavigationActivity啓動。我在NavigationActivity中調用了startActivityForResult()方法,在SearchActivity中調用了setResult(),finish()和onActivityResult()方法,但它仍然不起作用。 onActivityResult()方法沒有被調用。 –

0

startActivityForResult用於從所謂的活動數據返回到調用活動,也就是說,如果活性的呼喚B,您可以使用startActivityForResult從b返回數據到

相關問題