【问题标题】:How can I get data from another function in onCreateView?如何从 onCreateView 中的另一个函数获取数据?
【发布时间】:2021-03-22 01:02:09
【问题描述】:

我已从名为 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”,其主要目的是在配置更改期间维护数据以及在 Activity 和 Fragment 之间传递数据。
  • 问题是 - 从您在此处共享的代码中 - 新创建的实例不会添加到 UI。您需要在您知道它当前正在显示的实例上调用receiveData()。几年前,有人会向 Fragmentmanager 查询 OrdersFragment 的当前实例。但是今天我们将按照@Shawn 的建议进行操作:让 Activity 将数据传递给 ViewModel 实例,该实例也可用于 OrdersFragment。另见Share data using a ViewModel

标签: java android android-activity android-recyclerview fragment


【解决方案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 为空,所以我无法设置该值。我以为不用适配器也可以,但谢谢,我会用适配器试试。
  • 如果您需要填充RecyclerView,您必须使用实现RecyclerView.Adapter 的类并在onBindViewHolder 方法中初始化其视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 2021-07-12
  • 2011-01-18
  • 1970-01-01
相关资源
最近更新 更多