我正试图在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();
}
}
当您使用和适配器时,您可以在它与元素集合之间创建一个链接,您可以在每次需要时更改这些元素。
每次向itemList添加元素时,您都在用户界面范围之外工作,因此必须在适配器上调用notifyDataSetChanged()以将UI ListView与itemList ArrayList重新对齐。
在你的情况下,首先要确保你在getInfo()中获取你期望的数据,然后你可能需要将元素的添加移动到onclick监听器中。
还要记住,每次应用程序中发生配置更改时都会调用onCreateView函数,因此在这种情况下,将继续重新创建itemList。
还要检查getinfo函数:据我所知,它会从每次调用中重新创建一个新对象,因此您强制此对象具有默认值。这不是您正在尝试实现的行为的正确方法:不使用活动来存储重要数据,只需使用片段之间通过引用共享的简单java类。
希望这个帮助或给你一些提示。干杯。