recyclerView

时间:2016-12-03 07:11:58

标签: android android-recyclerview android-adapter

我是新来的,我的活动包含ViewPager,其中包含两个Fragments。每个Fragment都有一个RecyclerView。通过OnTabSelection中的RecyclerView项目选择标签时,会重复这一过程。我无法理解造成这个问题的原因。

我正在使用DataHandler来保存数据,因为我还必须在其他活动中使用此数据。

class DataHandler {

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

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

    public ArrayList<MenuHolder> getListOfItemsFromJson() {
        return listOfItemsFromJson;
    }
    public void clearList() {
        listOfItemsFromJson.clear();
    }
    public void addData(MenuHolder holder) {
        listOfItemsFromJson.add(holder);
    }
    public MenuHolder getData(int position) {
        return listOfItemsFromJson.get(position);

    }
    public void removeData(int position) {
        listOfItemsFromJson.remove(getData(position));
    }
    public int size() {
        return listOfItemsFromJson.size();
    }
}

这是我的Fragment

class ComboRecycler extends Fragment {

    private ArrayList<Integer> index = new ArrayList<>();
    private LinearLayout mViewCartLayout;
    private RelativeLayout relativeLayout;
    private RecyclerView recyclerView;
    RecyclerView.Adapter recyclerAdapter;
    RecyclerView.LayoutManager recylerViewLayoutManager;

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

        View view = inflater.inflate(R.layout.recycler_combo, container, false);
        relativeLayout = (RelativeLayout) view.findViewById(R.id.relativelayout1);

        recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);

        recylerViewLayoutManager = new LinearLayoutManager(getActivity());

        recyclerView.setLayoutManager(recylerViewLayoutManager);
        new FetchTask().execute();
        return view;
    }


    public class FetchTask extends AsyncTask<Void, Void, JSONArray> {
        @Override
        protected JSONArray doInBackground(Void... params) {
            JSONArray jsonArray;
               ........

    }

        @Override
        protected void onPostExecute(JSONArray result) {
            if (result != null) {
                try {


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

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

                        }

                    }
                    for (int i = 0; i < result.length(); i++) {
                        JSONObject mJsonObject = result
                                .getJSONObject(i);

                        MenuHolder mDataHolder = new MenuHolder();
                         ......
                        mDataHolder.setCombo(true);
                        mDataHolder.setItemCount("0");
                        DataHandler.getInstance().addData(mDataHolder);
                    }

                    setAdapter();
                } catch (Exception e) {
                }
            }
        }
    }

    private void setAdapter() {
        index.clear();
        for (int i = 0; i < DataHandler.getInstance().size(); i++) {
            if (DataHandler.getInstance().getListOfItemsFromJson().get(i).isCombo()) {
                index.add(i);
            }
        }
        recyclerComboAdapter = new RecyclerComboAdapter(getActivity(), index);
        recyclerView.setAdapter(recyclerComboAdapter);
    }

}

这是我的RecyclerAdapter

class RecyclerComboAdapter extends RecyclerView.Adapter<RecyclerComboAdapter.ViewHolder> {

    Context context;
    View view1;
    ViewHolder viewHolder1;
    ArrayList<Integer> index;
    LinearLayout mViewCart;
    Recycler recycler;
    private AQuery mQuery;

    public RecyclerComboAdapter(Context context1, ArrayList<Integer> index) {

        this.index = index;
        context = context1;
        mQuery = new AQuery(context1);

    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    @Override
    public int getItemViewType(int position) {

        return position;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        view1 = LayoutInflater.from(context).inflate(R.layout.combo_meals_adapter, parent, false);

        viewHolder1 = new ViewHolder(view1);

        return viewHolder1;


    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {

        final int pos = position;
        MenuHolder menuHolder =DataHandler.getInstance().getData(index.get(position));

        holder.itemName.setText(menuHolder.getItemname());
        holder.itemPrice.setText(menuHolder.getItemprice());
        mQuery.id(holder.imageView).image(menuHolder.getItemPicture());
        holder.counter.setText(menuHolder.getItemCount());


      }

    @Override
    public int getItemCount() {
        return index.size();
    }

    static class ViewHolder extends RecyclerView.ViewHolder {

        ImageView imageView;

        TextView add, minus, plus, counter, itemName, itemPrice;

        ViewHolder(View v) {
            super(v);

            itemName = (TextView) v.findViewById(R.id.itemnametxt);
            imageView = (ImageView) v.findViewById(R.id.image);
            itemPrice = (TextView) v.findViewById(R.id.price);
            minus = (TextView) v.findViewById(R.id.minus);
            plus = (TextView) v.findViewById(R.id.plus);
            counter = (TextView) v.findViewById(R.id.count);
            add = (TextView) v.findViewById(R.id.addtxt);
        }
    }
} 

多次滑动列表后,我看到重复的列表项。请帮我解决这个问题。提前谢谢。

0 个答案:

没有答案