在listview中使用错误值更新UI

时间:2016-12-01 05:46:00

标签: android listview

请原谅我的英语。我有一个活动包含两个带有viewpager的片段。每个片段都有一个列表视图。

我在很多地方使用这些数据,所以我将其创建为静态。

class DataHandler {

         static ArrayList<MenuHolder> listOfItemsFromJson = new ArrayList<MenuHolder>();


        public static ArrayList<MenuHolder> getListOfItemsFromJson() {
            return listOfItemsFromJson;
        }


        public static void addData(MenuHolder holder) {
            listOfItemsFromJson.add(holder);

        }

        public static MenuHolder getData(int position) {

            return listOfItemsFromJson.get(position);

        }


        public static void modifyData(MenuHolder holder, int position) {

                 listOfItemsFromJson.set(position, holder);
         }
        public static int size() {

            return listOfItemsFromJson.size();
        }
    }

这里,我的片段代码。在onCreateView()中,我正在清除以前的数据&amp; 添加新数据。

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_combo, container, false);

        mlistView = (ListView) view.findViewById(R.id.mListView);

//here I am clearing the previous data and loading new data 

   for (int i = 0; i < DataHandler.size(); i++) {

            if (DataHandler.getData(i).isCombo()) {
                DataHandler.removeData(i);
            }

        }


        for (int i = 0; i < 3; i++) {
            MenuHolder mMenuHolder = new MenuHolder();

            mMenuHolder.setItemname(itemNames[i]);
            mMenuHolder.setImageName("@mipmap/ic_launcher");
            mMenuHolder.setItemCount("0");
            mMenuHolder.setItemprice("500");
            mMenuHolder.setUserSeleted(false);
            mMenuHolder.setCombo(true);

            DataHandler.addData(mMenuHolder);

        }
        index.clear();
        for (int i = 0; i < DataHandler.size(); i++) {
            if (DataHandler.getListOfItemsFromJson().get(i).isCombo()) {
                index.add(i);
            }
        }

        mCombosAdapter = new ComboMenuAdapter(getActivity(), index);

        mlistView.setVisibility(View.VISIBLE);
        mlistView.setAdapter(mCombosAdapter);


        return view;
    }

我在这里得到错误的价值观。 DataHandler.size()是错误的。

 for (int i = 0; i < DataHandler.size(); i++) {
                if (DataHandler.getListOfItemsFromJson().get(i).isCombo()) {
                    index.add(i);
                }
             }

在这里,我正在导航到另一个活动,并在dataHandler类和&amp ;;回来之后,列表大小是错误的&amp;列表大小正在增加。

1 个答案:

答案 0 :(得分:1)

我认为你的DataHandler应该是单身人士;

class DataHandler {
    private static DataHandler mInstance = null;
    ArrayList<MenuHolder> listOfItemsFromJson;

    public DataHandler getInstance() {
        if(null == mInstance) {
           mInstance = new DataHandler();
       }
    }
    public DataHandler() {
          listOfItemsFromJson = new ArrayList<MenuHolder>();
    }

    public ArrayList<MenuHolder> getListOfItemsFromJson() {
        return listOfItemsFromJson;
    }


    public void addData(MenuHolder holder) {
        listOfItemsFromJson.add(holder);

    }

    public MenuHolder getData(int position) {

        return listOfItemsFromJson.get(position);

    }


    public void modifyData(MenuHolder holder, int position) {

             listOfItemsFromJson.set(position, holder);
     }
    public int size() {

        return listOfItemsFromJson.size();
    }
}

您可以像以下一样使用它:DataHandler.getInstance().size();

但我觉得你设置dataHandler是因为静态是丑陋的...... 你可以创建一个适配器替换DataHandler,然后你的所有listview都可以使用这个适配器。