Как поймать результат намерения в классе CustomListAdapter Listview в Android

У меня есть ArrayList, в котором есть объекты типа Person. Класс Person имеет поля name, address1, address2, city, state, postcode и country. Я хочу иметь возможность редактировать конкретного человека, а затем обновлять изменения таким образом, чтобы ListAdapter, который отображает людей, отображал обновленные данные. Этот ListView содержится в RecipientActivity (Activity A)

В пользовательском адаптере я запускаю Activity RecipientAddressActivity (Activity B), используя намерение в событии TextView onClick:

holder.txtRecName.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {               
            Intent rec_Intent = new Intent(context,
                                        RecipientAddressActivity.class);
            rec_Intent.putExtra("Current_Recipient",
                                         recipientArray.get(index));
            rec_Intent.putExtra("RecipientIndex",index);
            context.startActivity(rec_Intent);          

        }
    }); 

В действии B я получаю Current_Recipient и индекс в событии onCreate() следующим образом:

current_rec = (Person) getIntent().getSerializableExtra(
            "Current_Recipient");
Recipient_Index = getIntent().getIntExtra("RecipientIndex", 151);

В том же действии у меня есть кнопка «Сохранить», и при ее нажатии я создаю объект Person, который может быть либо новым человеком, либо редактируемым старым человеком.

Событие кнопки Сохранить onClick()

{
  Intent Recipient_info = new Intent();
  Person recipient = new Person(edt_rec_name.getText().toString(),
   edt_rec_addr1.getText().toString(),edt_rec_addr2.getText().toString(),
   edt_rec_city.getText().toString(), edt_rec_state.getText().toString(),
   edt_rec_pcode.getText().toString(), edt_rec_country.getText().toString()); 
   Recipient_info.putExtra("Person", recipient);
   Recipient_info.putExtra("RecipientIndex", Recipient_Index);
   setResult(RESULT_OK, Recipient_info);
   finish();
}

Проблема в том, что есть 2 способа запуска действия B. Я не знаю, где и как получить результат, когда действие B запускается с помощью адаптера ListView.

Пожалуйста, помогите мне как можно скорее. Пожалуйста, дайте мне знать, если требуется дополнительный код или объяснение.

Спасибо.


person user2688158    schedule 19.02.2014    source источник
comment
реализует ли ваш класс Person возможность разделения?   -  person Raghunandan    schedule 19.02.2014
comment
@Raghunandan Нет, он реализует Serializable.   -  person user2688158    schedule 19.02.2014
comment
для Android разделяемый лучше, чем сериализуемый. найдите пример и следуйте инструкциям   -  person Raghunandan    schedule 19.02.2014
comment
@Raghunandan Как это решает вышеуказанную проблему?   -  person user2688158    schedule 19.02.2014
comment
я сказал, что лучше использовать посылки, а затем сериализуемые, проверьте документы. Это предложение, а не решение. Вам решать, следовать ему или оставить.   -  person Raghunandan    schedule 19.02.2014
comment
@Raghunandan Спасибо за предложение.   -  person user2688158    schedule 19.02.2014
comment
проверьте это stackoverflow.com/questions/3323074/   -  person Raghunandan    schedule 19.02.2014


Ответы (1)


Я заметил, что в вашем коде:

вы не начинаете деятельность как activityForResult.

проверьте это и попробуйте прямо сейчас! если вы все еще сталкиваетесь с этой проблемой, то вот несколько ссылок, которые будут полезны в вашей проблеме:

вызов onActivityResult из адаптера CustomArray

onActivityResult не вызывается в классе, расширенном из ArrayAdapter

Как добавить элемент в Custom listView в методе onActivityResult?< /а>

Как вызвать onActivityResult в представлении списка адаптера?

person Hamad    schedule 19.02.2014