2013-12-13 55 views
3

我有两个活动,当我按下第一个活动的输入,它会打开第二个活动,它包含一个ListView,当我从ListView选择一个项目,它会得到它的价值,并带回到第一次活动回到上一个活动意向

这是我试过的;

上的第一项活动

edtText.setText(getIntent().getStringExtra("NAMA_PERASAT")); // inside onCreate 

public void onActivityResult(int requestCode,int resultCode, Intent data) 
{ 
    edtText.setText(getIntent().getStringExtra("NAMA_PERASAT")); 
} 

,但没有发生次活动

listPerasat.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 
      NamaPrst = ((TextView) view.findViewById(R.id.txtListNamaPrst)).getText().toString(); 
      Intent i = new Intent(); 
      i.putExtra("NAMA_PERASAT", NamaPrst); 
      finish(); 
     } 
    }); 
} 

。我如何获得意图并回到之前的活动?

回答

5

你想调用startActivityForResult()此启动,以便正确的活动。因此,在您第一次Activity

Intent i = new Intent(FirstActivity.this, SecondActivity.class); 
startActivityForResult(i, SOME_REQUEST_CODE); // you give SomeRequesSOME_REQUEST_CODE an int value 

然后在onItemClick()你需要调用setResult()并发送回Intent。这将在你的第一个Activity

listPerasat.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 
     NamaPrst = ((TextView) view.findViewById(R.id.txtListNamaPrst)).getText().toString(); 
     Intent i = new Intent(); 
     i.putExtra("NAMA_PERASAT", NamaPrst); 
     setResult(RESULT_OK, i); 
     finish(); 
    } 
}); 
} 

在你的第一个Activity调用onActivityResult()onActivityResult(),不叫getIntent()。这将尝试使用最初开始您的第一个ActivityIntent。相反,使用Intent你传回

@Override 
public void onActivityResult(int requestCode,int resultCode, Intent data) 
{ 
    edtText.setText(data.getStringExtra("NAMA_PERASAT")); 
} 

See this answer for another example

+0

不错,它的工作原理是什么?SOME_REQUEST_CODE是什么?我尝试了1它有一个错误,然后我尝试了0,并且一切正常 – Darjeeling

+0

您可以使用0或者您可以创建自己的'常量int'使用。 – codeMagic

0

试试这个:

Intent resultIntent = new Intent(ctx, ViewMessageDialog.class); 
resultIntent.putExtra("NAMA_PERASAT", message); 
ctx.startActivity(resultIntent); 
0

你忘了之前

finish(); 

startActivity(intent); 
// or to start with a back result 
// startActivityForResult(intent, YOUR_REQUEST_CODE, EXTRA_BUNDLE); 
finish(); 
0

调用结果的第二个活动。它会在OnAcitiviyResult上返回你选择的数据。 就像如下:

link to post

0

second activity编辑您这样的代码

Intent i = new Intent(); 
     i.putExtra("NAMA_PERASAT", NamaPrst); 
     setResult(RESULT_OK, i); 
     finish(); 

然后在first activity's onActivityResult(),首先检查如果结果是选择了 “OK”,即东西。

public void onActivityResult(int requestCode,int resultCode, Intent data) 
    { 
     if(resultCode == Activity.RESULT_OK){ 
     edtText.setText(data.getStringExtra("NAMA_PERASAT")); 
     } 
    } 

如果打开第二个活动后,你没有选择任何东西,按下back button然后因为没有从second activity过去了,你会得到错误。因此,请首先检查是否已执行setResult(RESULT_OK, i);,即已添加extras,现在我们手动设置所有内容均为OK