将字符串从活动B传递到活动A

时间:2016-02-10 06:18:25

标签: android

我有两个活动,活动A和B.当用户点击活动A中的topicTextView时,会将他带到活动B,用户选择主题并将selectedTopic传递给活动A.

我已实施以下内容,但在打开活动A时,应用首次崩溃。

活动A

@Override
protected void onCreate(Bundle savedInstanceState) {

  topicTextView = (TextView) findViewById(R.id.topicTextView);
  // crashes in the following line
  String selectedTopic = getIntent().getExtras().getString("selectedTopic");
  if (selectedTopic != null && !selectedTopic.isEmpty()) {
   topicTextView.setText(selectedTopic);
  }
}

活动B

@Override
 protected void onCreate(Bundle savedInstanceState) {
   listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3)   {
      Intent i = new Intent(ActivityB.this, ActivityA.class);
      i.putExtra("selectedTopic", topics[position].toString());
      startActivity(i);
   }
 });
}

3 个答案:

答案 0 :(得分:2)

在获取值之前,检查天气Bundle是否具有该值。在您的情况下,问题是当您第一次运行时,getIntent().getExtras().getString("selectedTopic");将返回null

if(getIntent().hasExtra("selectedTopic"))
{
    String selectedTopic = getIntent().getExtras().getString("selectedTopic");
    if (selectedTopic != null && !selectedTopic.isEmpty()) {
      topicTextView.setText(selectedTopic);
    }
}

另一个好方法是使用startActivityForResult()并传递活动B中的值,您将在活动A的onActivityResult()中获得该值,请查看此问题的reference问题

答案 1 :(得分:1)

它是空的,因为你第一次来活动A,你没有在意图中的那个字符串,所以检查意图中是否存在该字符串

if(getIntent().hasExtra("selectedTopic")){
String selectedTopic = getIntent().getExtras().getString("selectedTopic");
  if (selectedTopic != null && !selectedTopic.isEmpty()) {
   topicTextView.setText(selectedTopic);
  }
}

最好是使用startActivityForResult()来实现这个

答案 2 :(得分:0)

更改您的代码:

String selectedTopic = null;
if(getIntent() != null && getIntent().getExtras() != null && getIntent().hasExtra("selectedTopic")){
 selectedTopic  = getIntent().getExtras().getString("selectedTopic");
}

if (selectedTopic != null && !selectedTopic.isEmpty()) {
   topicTextView.setText(selectedTopic);
}