Итак, есть 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());
...
Комментариев нет:
Отправить комментарий