Как правильно сделать доступ к данным класса
Добавлено: 22 окт 2015, 06:50
Есть класс X, в нём есть кучка данных, все с модификатором private, кроме одного:
Зачем это сделал - есть фрагмент с ListView, где адаптер определяется так:
Дальше по ходу работы x.data пополняется свежими данными (изнутри класса методами ес-но), в FragmentList вызывается
Всё работает как надо.
Но меня гложат сомнения. Ведь неправильно это в корне, когда данные класса public!
Можно ведь наверное организовать это как-то по-другому.
Я придумал только варианты,
1) когда в классе data будет private, сделать какой-нибудь метод, который будет возвращать копию, во фрагменте получать копию и её уже привязать к адаптеру. Ну и регулярно при обновлении data в классе обновлять и данные в копии. Но получится две копии данных одного и того же + доп. код для поддержки актуальности копии.
2) Пробовал сделать метод, возвращающий те же данные и привязать адаптер так:
Но в начальный момент список пуст, и при добавлении в x.data данных список не обновляется. Что и понятно, т.к. x.getData() в начале вернул пустой список, а больше его никто не зовёт.
Вобщем вопрос - как правильно организовать хранение данных в классе с модификатором private и в то же время, чтобы список нормально работал?
Код: Выделить всё
public class X {
...
public ArrayList<Map<String, Object>> data;
...
}
Код: Выделить всё
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);
...
Код: Выделить всё
sAdapter.notifyDataSetChanged();
Но меня гложат сомнения. Ведь неправильно это в корне, когда данные класса public!
Можно ведь наверное организовать это как-то по-другому.
Я придумал только варианты,
1) когда в классе data будет private, сделать какой-нибудь метод, который будет возвращать копию, во фрагменте получать копию и её уже привязать к адаптеру. Ну и регулярно при обновлении data в классе обновлять и данные в копии. Но получится две копии данных одного и того же + доп. код для поддержки актуальности копии.
2) Пробовал сделать метод, возвращающий те же данные и привязать адаптер так:
Код: Выделить всё
sAdapter = new SimpleAdapater(getActivity(), x.getData(), R.layout.listitemg, from, to);
Вобщем вопрос - как правильно организовать хранение данных в классе с модификатором private и в то же время, чтобы список нормально работал?