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返回数据到

相关问题