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