#android #textview #android_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
для инициализации?
В общем, как обычно, нужна помощь.
Ответы
Ответ 1
Ваш код 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()); ...
Комментариев нет:
Отправить комментарий