如何从getter中写入Fragment中的listView?

问题描述 投票:-1回答:1

我正试图在listview填充Fragment,数据来自另一个Fragment的吸气器。但是,当我从第一个Fragment添加更多项目时,我会继续覆盖数据而不是添加新数据。

我试过在Stackoverflow上找到了很多解决方案,但是没有一个能为我工作。我很确定这是因为我每次运行代码时都会实例化一个新列表,但我似乎无法找到解决这个问题的方法。

下面的代码是Fragment,它通过底部的getData()方法接收数据。

public class FoodFragment extends Fragment {

    ImageButton addFood;
    String foods, carbo, protein, fats;
    ListView listView;
    ArrayList<String> itemList;
    ArrayAdapter<String> adapter;

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


        addFood = view.findViewById(R.id.addFood);
        listView = view.findViewById(R.id.caloriesEaten);

        itemList = new ArrayList<>();
        getInfo();

        if(foods != null) {
            for(int i = 0; i <1; i++){
                itemList.add(foods);
            }
        }

        adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, itemList);
        listView.setAdapter(adapter);

        addFood.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentTransaction fr = getFragmentManager().beginTransaction();
                fr.replace(R.id.fragment_container, new TrackingFragment());
                fr.addToBackStack(null).commit();
            }
        });
        return view;
    }

    public void getInfo(){
        TrackingActivity trackingActivity = new TrackingActivity();
        foods = trackingActivity.getName();
        carbo = trackingActivity.getCarbohydrates();
        protein = trackingActivity.getProtein();
        fats = trackingActivity.getFats();

    }
}
android listview android-fragments getter-setter
1个回答
0
投票

当您使用和适配器时,您可以在它与元素集合之间创建一个链接,您可以在每次需要时更改这些元素。

每次向itemList添加元素时,您都在用户界面范围之外工作,因此必须在适配器上调用notifyDataSetChanged()以将UI ListView与itemList ArrayList重新对齐。

在你的情况下,首先要确保你在getInfo()中获取你期望的数据,然后你可能需要将元素的添加移动到onclick监听器中。

还要记住,每次应用程序中发生配置更改时都会调用onCreateView函数,因此在这种情况下,将继续重新创建itemList。

还要检查getinfo函数:据我所知,它会从每次调用中重新创建一个新对象,因此您强制此对象具有默认值。这不是您正在尝试实现的行为的正确方法:不使用活动来存储重要数据,只需使用片段之间通过引用共享的简单java类。

希望这个帮助或给你一些提示。干杯。

© www.soinside.com 2019 - 2024. All rights reserved.