请原谅我的英语。我有一个活动包含两个带有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;列表大小正在增加。
答案 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都可以使用这个适配器。