2014-02-07 2 views
2

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

Я хочу, чтобы иметь возможность изменять информацию в этом элементе, а затем, когда я нажимаю на нее, меняет ListView.

Вот некоторые из кода у меня есть:

MainActivity:

String[] people; 

private ListView mListView; 

public static ArrayAdapter<String> adapter; 

В OnCreate() {

people = new String[] {"", "", "", "", "", "", "", ""}; 

    mListView = (ListView) findViewById(R.id.personListView); 
    adapter = (new ArrayAdapter<String>(this, R.layout.list_item, people); 

    mListView.setAdapter(adapter); 

    mListView.setOnItemClickListener(new OnItemClickListener(){ 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // Current item 
      String person = ((TextView) view).getText().toString(); 


      // Launch new activity based on item 
      Intent intent = new Intent(getApplicationContext(), SinglePerson.class); 
//    
      intent.putExtra("person", person); 
      //intent.putExtra("peopleList", people); 
      intent.putExtra("position", position); 
      startActivityForResult(intent, 1); 
//    
     } 

    }); 

У меня есть это в классе, который я думал бы получить информацию от другой деятельности, но ничего не происходит:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // Check which request we're responding to 
    if (requestCode == 1) { 
     // Make sure the request was successful 
     if(resultCode == RESULT_OK){ 
      int listPos = data.getIntExtra("listPosition", 1); 
      //edit listview value at position 
      people[listPos] = data.getStringExtra("edittextvalue"); 
      adapter.notifyDataSetChanged(); 
     } 
    } 
} 

В другом классе деятельности:

public class SinglePerson extends Activity{ 

String[] people; 
int position; 
Intent intent; 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    this.setContentView(R.layout.single_person_item_view); 

    EditText txtPerson = (EditText) findViewById(R.id.person_name); 

    intent = getIntent(); 

    String person = intent.getStringExtra("person"); 
    //people = intent.getStringArrayExtra("peopleList"); 
    position = intent.getIntExtra("position", 0); 
    txtPerson.setText(person); 

} 

private TextWatcher peopleNumberListener = new TextWatcher(){ 

    @Override 
    public void afterTextChanged(Editable s) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 

     //people[position] = s.toString(); 
     //BillSplit.adapter.notifyDataSetChanged(); 


     intent.putExtra("edittextvalue",s.toString()); 
     intent.putExtra("listPosition", position); 
     setResult(RESULT_OK, intent);   
     //finish(); 

    } 

}; 
+0

Можете ли вы уточнить, что вы подразумеваете под «когда я нажимаю на нее, меняет вид списка»? Вы на самом деле щелкаете по обратной клавише? Причина, которая приведет к отрицанию установки результата и 'finish()' second вашего Activity. – anddev84

+0

Ах! Я просто нажимаю клавишу «назад» - я думаю, я сделаю кнопку, чтобы сделать это вместо этого. Есть ли что-то еще не так, как я сделал это, кроме того, что вы можете видеть? –

+0

попробуйте использовать журнал или system.out.println, чтобы проверить, получаете ли вы данные, что хотите. –

ответ

2

В соответствии мой комментарий выше, если вы нажимаете клавишу возврата, то вы не правильно закончить активность. То, что вы хотите сделать, когда вы будете готовы прекратить активность, либо в Баттона или каким-либо другим действием, то сделайте следующее (который он выглядит, как вы уже в основном разобрался)

... 
// you can create a new Intent for the result 
Intent newIntent = new Intent(); 
newintent.putExtra("edittextvalue",s.toString()); 
newintent.putExtra("listPosition", position); 
setResult(RESULT_OK, newintent);   
finish(); 
... 

EDIT: В ответ тем, кто отправляет переопределение onBackPressed(), это позволит вам перехватить обратный ключ, когда вы нажмете его в своей деятельности и решите, как вы хотите его обработать. Однако обратите внимание на следующее: если это для широкой публики, большинство пользователей ожидают, что обратный ключ примет вас в виде «назад», но это не то же самое, что завершение или прогресс через обычный поток ваше приложение (которое вы хотите сделать, сделав выбор, а затем продолжить, где вы остановились). Таким образом, в то время как это может достигнуть желаемого поведения, это спорно, является ли правильным решением для вас.

0

Я бы использовал Синглтон, если у вас более двух видов деятельности. Если его только два, то, вероятно, использование intent.put. Спасибо,

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