Страницы

Поиск по вопросам

среда, 22 мая 2019 г.

Помогите инициализировать TextView

Итак, есть layout, содержащий 2 объекта — RecycledView и TextView. RecyclerView работает через адаптер, который передаёт значение в TextView. Выглядит это так. Фрагмент, содержащий TextView
public class FragmentCharts extends Fragment {
//объявляем TextView TextView chartDetailsHeader;
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_charts, container, false);
RecyclerView rationsChart = (RecyclerView) view.findViewById(R.id.rations_chart); rationsChart.setHasFixedSize(true);
LinearLayoutManager rationsChartLayoutManager = new LinearLayoutManager( getContext(), LinearLayoutManager.HORIZONTAL, true); rationsChart.setLayoutManager(rationsChartLayoutManager);
ChartAdapter chartAdapter = new ChartAdapter(); rationsChart.setAdapter(chartAdapter);
//инициализируем TextView chartDetailsHeader = (TextView) view.findViewById(R.id.chart_details_heading); chartDetailsHeader.setTypeface(CommonSettings.getRobotoCondLight()); return view; }
//метод для изменения значения TextView public void setChartHeader(Date date) { SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM", Locale.US); String s = dateFormat.format(date); chartDetailsHeader.setText(s); } }
Изменение TextView происходит отправкой метода из адаптера:
new FragmentCharts().setChartHeader(archivesForCharts.get(0).get(0).getDate());
Как я понимаю, при создании new FragmentCharts() должна происходить инициализация TextView, но в методе setChartHeader() значение TextView почему-то null
Пытался инициализировать TextView повторно в setChartsHeader(), но где взять view для инициализации?
В общем, как обычно, нужна помощь.


Ответ

Ваш код new FragmentCharts().setChartHeader(archivesForCharts.get(0).get(0).getDate()); каждый раз создаёт новый фрагмент. Но так как он ни куда не аттачится и не отображается, соответственно у него не вызываются никакие методы жизненного цикла, в том числе и onCreateView, в котором вы инициализируете TextView. Поэтому он и null
Как решить? Не создавать новый объект фрагмента, а вызывать метод у существующего. То есть, например, добавить в конструктор адаптера параметр FragmentCharts fragment, и обращаться уже к нему. Во фрагменте у вас будет:
ChartAdapter chartAdapter = new ChartAdapter(this);
А в адапрере:
private FragmentCharts fragment;
public ChartAdapter(FragmentCharts fragment) { this.fragment = fragment; } ... fragment.setChartHeader(archivesForCharts.get(0).get(0).getDate()); ...

Комментариев нет:

Отправить комментарий