Android 如何从getter以片段形式写入listView?
我试图在Android 如何从getter以片段形式写入listView?,android,listview,android-fragments,getter-setter,Android,Listview,Android Fragments,Getter Setter,我试图在片段中填充列表视图,数据来自另一个片段的getter集。但是,当我从第一个片段添加更多项时,我会不断覆盖数据,而不是添加新数据 我尝试在Stackoverflow上找到许多解决方案,但没有一个对我有效。我很确定这是因为每次代码运行时我都会实例化一个新的列表,但我似乎不知道如何解决这个问题 下面的代码是通过底部的getData()方法接收数据的片段 public class FoodFragment extends Fragment { ImageButton addFood;
片段中填充列表视图
,数据来自另一个片段的getter集。但是,当我从第一个片段添加更多项时,我会不断覆盖数据,而不是添加新数据
我尝试在Stackoverflow上找到许多解决方案,但没有一个对我有效。我很确定这是因为每次代码运行时我都会实例化一个新的列表,但我似乎不知道如何解决这个问题
下面的代码是通过底部的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();
}
}
公共类FoodFragment扩展了片段{
食物;
串食品、碳水化合物、蛋白质、脂肪;
列表视图列表视图;
ArrayList项目列表;
阵列适配器;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u食品,容器,假);
addFood=view.findviewbyd(R.id.addFood);
listView=view.findViewById(R.id.carorieseaten);
itemList=新的ArrayList();
getInfo();
如果(食物!=null){
对于(int i=0;i当您使用和适配器时,您可以在它和元素集合之间创建一个链接,您可以随时更改该链接
每次向itemList添加元素时,您都在用户界面范围之外工作,因此必须在适配器上调用notifyDataSetChanged(),以将UI ListView与itemList ArrayList重新对齐
在本例中,首先确保您在getInfo()中从源代码中获得了所需的数据,然后可能需要将添加的元素移动到onclick侦听器中
还请记住,每次应用程序中发生配置更改时,都会调用onCreateView函数,因此在这种情况下,将不断重新创建itemList
还要检查getinfo函数:据我所知,它从每次调用中重新创建一个新对象,以便强制该对象具有默认值。
这不是实现您试图实现的行为的正确方法:与其使用活动来存储重要数据,不如使用一个简单的java类,该类通过引用在片段之间共享
希望这能给你一些帮助或提示。
干杯。更改Arraylist上的值,然后在适配器上调用“notifyDataSetChanged()”。我不确定我是否理解您的答案。例如,如果我使用itemList.add(foods,I),我将只获取同一项的I数量。然后,当我使用另一项再次运行代码时,我将获取该项的I数量。它将覆盖列表中已存在的项,并停止添加新项。例如,假设您使用数组列表x。如果您使用x制作适配器,则可以使用x执行任何操作,无论何时调用notifyDataSetChanged()在适配器上,它将检查x变量保存的值并相应更新,无论您是否删除了以前的值。仅在第一次尝试创建itemList,即将itemList=new ArrayList();
更改为if(itemList==null)itemList=new ArrayList()
。希望有帮助!否则,请澄清“当我从第一个片段添加更多项目时”,第一个片段是什么?如何从第一个片段转到这个片段?以及的目的是什么(int i=0;感谢您的回复。我正在获取填充listView所需的信息。thís类中的onClickListener只需一个按钮,即可更改为另一个片段,其中该信息由用户选择。我将再次查看notifyDataSetChanged()。谢谢。