Как правильно сделать доступ к данным класса

Ответить
alex1
Сообщения: 12
Зарегистрирован: 22 июл 2015, 13:45

Как правильно сделать доступ к данным класса

Сообщение alex1 » 22 окт 2015, 06:50

Есть класс X, в нём есть кучка данных, все с модификатором private, кроме одного:

Код: Выделить всё

public class X {
...
public ArrayList<Map<String, Object>> data;
...
}
Зачем это сделал - есть фрагмент с ListView, где адаптер определяется так:

Код: Выделить всё

public class FragmentList extends Fragment {
...
ListView lvX;
SimpleAdapter sAdapter;
X x;
String from = new String[] { кучка строк };
int to = new int[] { R.id.xxx, .... };
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
...

View rootView = inflater.inflate(R.layout.frame_list, container, false);
lvX = (ListView)rootView.findViewById(R.id.listView1);
x = new X();
sAdapter = new SimpleAdapater(getActivity(), x.data, R.layout.listitemg, from, to);
lvX.setAdapter(sAdapter);
...
Дальше по ходу работы x.data пополняется свежими данными (изнутри класса методами ес-но), в FragmentList вызывается

Код: Выделить всё

sAdapter.notifyDataSetChanged();
Всё работает как надо.
Но меня гложат сомнения. Ведь неправильно это в корне, когда данные класса public!
Можно ведь наверное организовать это как-то по-другому.
Я придумал только варианты,
1) когда в классе data будет private, сделать какой-нибудь метод, который будет возвращать копию, во фрагменте получать копию и её уже привязать к адаптеру. Ну и регулярно при обновлении data в классе обновлять и данные в копии. Но получится две копии данных одного и того же + доп. код для поддержки актуальности копии.
2) Пробовал сделать метод, возвращающий те же данные и привязать адаптер так:

Код: Выделить всё

sAdapter = new SimpleAdapater(getActivity(), x.getData(), R.layout.listitemg, from, to);
Но в начальный момент список пуст, и при добавлении в x.data данных список не обновляется. Что и понятно, т.к. x.getData() в начале вернул пустой список, а больше его никто не зовёт.

Вобщем вопрос - как правильно организовать хранение данных в классе с модификатором private и в то же время, чтобы список нормально работал?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Как правильно сделать доступ к данным класса

Сообщение Foenix » 22 окт 2015, 17:21

По-моему в уроках есть примеры. Класс х в твоём случае содержит просто данные а в адаптер подставляют arraylist<x>
А так как ты не раскрыл что есть х и методы в нем то не ясночто тебе посоветовать
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

alex1
Сообщения: 12
Зарегистрирован: 22 июл 2015, 13:45

Re: Как правильно сделать доступ к данным класса

Сообщение alex1 » 23 окт 2015, 05:25

Точно. Урок №54.
Пошёл читать и переделывать адаптер.
Спасибо.
А вообще пишу первое приложение для android. Простенькая игра. Позже выложу если интересно кому.

Ответить