2013-12-13 4 views
3

У меня есть два вида деятельности, и когда я нажимаю кнопку ввода при первом действии, он откроет второе действие, он содержит ListView, и когда я выберу элемент из ListView, он получит его значение и вернет до первой деятельностиназад к предыдущей деятельности с намерением

это то, что я пробовал;

на второй активности

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(); 
     } 
    }); 
} 

на первой активности

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

или

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

, но ничего не произошло. как я могу получить намерение и вернуться к предыдущей деятельности?

ответ

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. Это будет вызывать onActivityResult() в своем первом 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(); 
    } 
}); 
} 

В onActivityResult() в первом Activity, не называйте getIntent(). Это попытается использовать Intent, который первоначально начал ваш первый Activity. Вместо этого используйте 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.

Смежные вопросы