Как я могу получить данные из другой функции в onCreateView?

Я отправил данные из действия под названием ItemDetails:

private void AddToCart(String name, String price) {
        OrdersFragment fragment = new OrdersFragment();
        fragment.receiveData(name, price);
    }

Я хочу показать данные в представлении ресайклера в OrdersFragment, когда я их получу (список пуст, он будет заполняться переданными данными, когда я получаю заказы)

Итак, я получаю данные здесь:

public void receiveData(String name, String price) {
        this.name = name;
        this.price = price;
}

Но я не могу получить к нему доступ в onCreateView:

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_rv_orders, container, false);
        txt_name = view.findViewById(R.id.order_item_name);
        txt_price = view.findViewById(R.id.order_item_price);

        txt_name.setText(name);
        txt_price.setText(price);

        return view;
    }

Я пробовал различные способы отправки данных из активности во фрагмент, и это единственный способ, которым он фактически отправлял данные во фрагмент, я просто не знаю, как получить к нему доступ. Любое предложение приветствуется.

Android рекомендует использовать «общую ViewModel», ее основная цель — поддерживать данные при изменении конфигурации и передавать данные между действиями и фрагментами.

Shawn 10.12.2020 16:40

Проблема в том, что из кода, которым вы поделились здесь, вновь созданный экземпляр не будет добавлен в пользовательский интерфейс. Вам нужно вызвать receiveData() экземпляр, где вы знаете, что он в данный момент отображается. Несколько лет назад можно было запросить Fragmentmanager для текущего экземпляра OrdersFragment. Но сегодня мы бы сделали это, как предлагает @Shawn: чтобы Activity передала данные в экземпляр ViewModel, который также доступен для OrdersFragment. См. также Делитесь данными с помощью ViewModel

Bö macht Blau 10.12.2020 18:55
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
143
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны установить свои строковые значения в методе receiveData фрагмента. Объявите во фрагменте две глобальные переменные (я предполагаю, что это TextView)

private TextView txt_name;
private TextView txt_price;

И инициализируйте их в методе onCreateView:

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_rv_orders, container, false);

    txt_name = view.findViewById(R.id.order_item_name);
    txt_price = view.findViewById(R.id.order_item_price);

    return view;
}

Наконец, установите текстовые значения с помощью

public void receiveData(String name, String price) {
    txt_name.setText(name);
    txt_price.setText(price);
}

Я читал, что вы имеете в виду RecyclerView в своем вопросе, если вам нужно заполнить список этого типа, вам нужно будет создать адаптер во фрагменте и заполнить его методом receiveData.

Я пробовал это, TextView имеет значение null, поэтому я не могу установить значение. Я думал, что смогу обойтись без переходника, но спасибо, попробую с переходником.

Dragana 11.12.2020 10:49

Если вам нужно заполнить RecyclerView, вы должны использовать класс, реализующий RecyclerView.Adapter, и инициализировать его представления в методе onBindViewHolder.

lpizzinidev 11.12.2020 10:59

Другие вопросы по теме