2016-04-11 3 views
0

У меня есть объект Book, который имеет поле urlString. ли я передать свой Book от Activity A в активность В с помощью Intent.putExtra(), а затем из активности B до активности C таким же образом. Внутри Деятельность C, я хочу обновить Book.urlString, таким образом, который также обновит исходную ссылку от Деятельность A. Смысл, в следующий раз, когда я подхожу к таким жеBook от Деятельность A - он уже будет иметь значение в поле urlString.Обновление посылок Объект, который был доставлен из предыдущей деятельности

Каков правильный способ сделать это (без создания книги статической)?

+0

Есть много подходов. 1) Сделать статическую книгу 2) хранить в sqlite 3) создать флаг – Pavya

+0

Я не хочу, чтобы книга статична ... Можете ли вы подробнее остановиться на «создать флаг»? –

+0

о действии C установить флаг true, on on resume of activity Флажок проверки == true, а затем обновить вашу книгу – Pavya

ответ

1

При передаче объектов через намерение это serialises его, и каждый раз при извлечении он создает новый объект. Таким образом, в Activity C у вас есть другой объект, кроме Activity A и B, в основном, если вы измените urlString, он не будет отражен в действии A или B.

Существует много подходов к решению этого вопроса, я предпочитаю использовать Singleton подход, который выступает в качестве поставщика данных

public class DataProvider { 
private static DataProvider ourInstance = new DataProvider(); 

public static DataProvider getInstance() { 
    return ourInstance; 
} 

private DataProvider() { 
} 

private List<Book> books; 

public List<Book> getBooks() { 
    return books; 
} 

public void setBooks(List<Book> books) { 
    this.books = books; 
} 

public Book getBookById(long id) { 
    // WRITE YOUR LOGIC HERE TO RETRIEVE OBJECT 
    return book; 
} 

чтобы получить доступ к использованию объекта книги ниже кода (надеясь, что вы есть способ дифференцировать объект книги т.е. я предполагал книгу идентификатор)

DataProvider.getInstance().getBookById(YOUR_ID); 

с таким подходом, как вы ссылаетесь к одному и тому же объекту во всех видах деятельности, w любые обновления, которые вы сделаете, будут отражены в других.

+0

Удивительное решение , Благодарю. –

0

Вам просто нужно сделать свой Book класс static.

или

Вы сохраните его в SharedPreferences и читать из SharedPreferences в каждом Activity

+0

Я не хочу делать книгу статической ... –

+0

@UFC Insider Используйте sharedpreferences, то –

+0

У меня есть тысячи книг, это неприменимо для сохранения их всех в sharedPreferences –

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