Как мне написать в listView во фрагменте из геттера? - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь заполнить 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();

    }
}

1 Ответ

0 голосов
/ 30 марта 2019

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

Каждый раз, когда вы добавляете элемент в свой itemList, вы работаете вне пользовательского интерфейса.области действия, поэтому вы должны вызвать notifyDataSetChanged () на адаптере, чтобы выровнять UI ListView с вашим ArrayList itemList.

В вашем случае сначала убедитесь, что вы получаете данные, которые вы ожидали из своего источника вgetInfo () и второе, вам, вероятно, нужно переместить добавление элементов в слушатель onclick.

Помните также, что функция onCreateView вызывается каждый раз, когда в вашем приложении происходит изменение конфигурации, поэтому в этом случае ваш itemListбудет создаваться непрерывно.

Проверьте также функцию getinfo: насколько я вижу, она воссоздает новый объект при каждом вызове, поэтому вы заставляете этот объект иметь значения по умолчанию.Это не правильный способ поведения, которого вы пытаетесь достичь: вместо того, чтобы использовать действие для хранения важных данных, просто используйте простой класс Java, который разделяется по ссылке между фрагментами.

Надеюсь, что это поможет или даствам некоторые намеки.Приветствия.

...