2011-12-31 3 views
4

У меня есть два вида деятельности, NewTransferMyOwn.java и FromAccount.javaКак передать объект в действие?

Когда я иду от NewTransferMyOwn.java к FromAccount.java, я писать код следующим образом

Intent i = new Intent(NewTransferMyOwn.this, FromAccount.class); 
startActivityForResult(i, FROM_ACCOUNT); 

Когда я вернулся из FromAccount .java к NewTransferMyOwn.java, то я хочу, чтобы передать весь объект класса Заявление

я написать код как

Statement st = ItemArray.get(arg2);//ItemArray is ArrayList<Statement>, arg2 is int 
Intent intent = new Intent(FromAccount.this,NewTransferMyOwn.class).putExtra("myCustomerObj",st); 

я получаю ошибку следующим образом на putExtra,

Изменения в «getIntExtra»

как я, там снова кастинг ул в целом, что такой вопрос здесь, как я могу передать заявление объект назад к активности?

+1

[Вы должны сделать некоторые поиск] (http://www.google.com.pk/search?q=android+passing+my+object+to+another+activity) –

+0

Я думаю, что-то между вами и google: -P @AdilSoomro, спасибо, но сейчас время kam he dear –

ответ

7

Вы также можете реализовать свой собственный класс по Serializable и передать пользовательский объект,

public class MyCustomClass implements Serializable 
{ 
    // getter and setters 
} 

А затем передать пользовательский объект с Намерения.

intent.putExtra("myobj",customObj); 

Чтобы получить ваш объект

Custom custom = (Custom) data.getSerializableExtra("myobj"); 

UPDATE:

Чтобы передать свой пользовательский объект к предыдущей деятельности при использовании startActivityForResult

Intent data = new Intent(); 
Custom value = new Custom(); 
value.setName("StackOverflow"); 
data.putExtra("myobj", value); 
setResult(Activity.RESULT_OK, data); 
finish(); 

Чтобы получить пользовательский объект на Previ ОЕ активность

if(requestCode == MyRequestCode){ 
    if(resultCode == Activity.RESULT_OK){ 
     Custom custom = (Custom) data.getSerializableExtra("myobj"); 
     Log.d("My data", custom.getName()) ; 
     finish(); 
    } 
} 
+0

Я не могу этого сделать из-за: «Метод putExtra (String, Parcelable) неоднозначен для типа Intent« –

+0

в предыдущей «Деятельности», результат будет извлечен из 'Bundle', поэтому он будет' newBundle(). .getExtras(). getSerializeable («ключ») '? – dakait

2

Вы не можете передавать произвольные объекты между действиями. Единственными данными, которые вы можете передать как дополнительные/в комплекте, являются либо фундаментальные типы, либо объекты Parcelable.

И Parcelables - это в основном объекты, которые могут быть сериализованы/десериализованы в/из строки.

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

+1

Parcelables не сериализованы для строк. Это специальные объекты, которые могут быть переданы через Binder IPC. В основном ваш объект, который должен быть передан между процессами, должен реализовывать интерфейс Parcelable и должен состоять из основных типов. – Yury

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