2013-12-13 63 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