Страницы

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

пятница, 6 марта 2020 г.

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

#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()); ...

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

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