0
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;

import com.melnykov.fab.FloatingActionButton;
import com.safir.dreamreminder.Activity.MainActivity;
import com.safir.dreamreminder.R;
import com.safir.dreamreminder.dataBase.DataBaseHandler2;
import com.safir.dreamreminder.dataBase.Data_Dream;

import java.util.List;



    public class BigDream extends Fragment {
        public DataBaseHandler2 db;
        RecyclerView mRecycleView;
        RecyclerView.LayoutManager mLayoutManager;
        RecyclerView.Adapter mAdapter;
        private FloatingActionButton fab;


        public BigDream() {
            // Required empty public constructor
        }




        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment

            DataBaseHandler2 dbb = new DataBaseHandler2(getActivity());
            Log.d("Reading: ", "Reading all contacts..");
            List<Data_Dream> contacts = dbb.getAllContactss();

            for (Data_Dream cn : contacts) {
                GridAdapter.dat.add(cn.getDream());
                String log = "Dream: " + cn.getDream() ;
                // Writing Contacts to log
                Log.d("Name: ", log);
            }

            View rootview=inflater.inflate(R.layout.recycler_view_frag, container, false);
            mRecycleView=(RecyclerView) rootview.findViewById(R.id.recyclerView);
            mRecycleView.setHasFixedSize(true);
            mLayoutManager=new LinearLayoutManager(getActivity());
            mRecycleView.setLayoutManager(mLayoutManager);
            mAdapter=new GridAdapter();
            mRecycleView.setAdapter(mAdapter);

            fab = (FloatingActionButton) rootview.findViewById(R.id.fab);
            fab.attachToRecyclerView( mRecycleView);
            fab.show();
            fab.setOnClickListener(
                    new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
                            LayoutInflater inflater = getActivity().getLayoutInflater();
                            final View dialogView = inflater.inflate(R.layout.edit_item, null);
                            dialogBuilder.setView(dialogView);

                            final EditText edt = (EditText) dialogView.findViewById(R.id.title);
                            final EditText editt = (EditText) dialogView.findViewById(R.id.detaill);


                            dialogBuilder.setPositiveButton("Done", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int whichButton) {
                                    db = new DataBaseHandler2(getActivity());
                                    String step = edt.getText().toString();
                                    String detail = editt.getText().toString();

                                    /**
                                     * CRUD Operations
                                     * */
                                    // Inserting Contacts
                                  Log.d("Insert: ", "Inserting ..");
                                    db.addContactss(new Data_Dream(step, detail));
                                    Intent be = new Intent(getActivity(), MainActivity.class);
                                    getActivity().finishAffinity();
                                    startActivity(be);
                                }
                            });
                            dialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int whichButton) {
                                    //pass
                                }
                            });


                            AlertDialog b = dialogBuilder.create();
                            b.show();


                        }
                    }
            );

            return rootview;
        }
        private static class NpaGridLayoutManager extends GridLayoutManager {
            /**
             * Disable predictive animations. There is a bug in RecyclerView which causes views that
             * are being reloaded to pull invalid ViewHolders from the internal recycler stack if the
             * adapter size has decreased since the ViewHolder was recycled.
             */
            @Override
            public boolean supportsPredictiveItemAnimations() {
                return false;
            }

            public NpaGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
                super(context, attrs, defStyleAttr, defStyleRes);
            }

            public NpaGridLayoutManager(Context context, int spanCount) {
                super(context, spanCount);
            }

            public NpaGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) {
                super(context, spanCount, orientation, reverseLayout);
            }
        }

    }


import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

//import com.example.android.navigationdrawerexample.R;

import com.safir.dreamreminder.Activity.MainActivity;
import com.safir.dreamreminder.R;
import com.safir.dreamreminder.dataBase.DataBaseHandler2;
import com.safir.dreamreminder.dataBase.Data_Dream;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by ooyanetomohito on 6/22/15.
 */
public class GridAdapter  extends RecyclerView.Adapter<GridAdapter.ViewHolder> {
    public  static Context bee;
    public static DataBaseHandler2 be;
    public static ArrayList<String> dat=new ArrayList<String>();
    public static ArrayList<String> del=new ArrayList<String>();

    List<item> mItems;
    public GridAdapter() {
        mItems = new ArrayList<item>();

       for(int i=0;i<dat.size();i++){
            item species = new item();
            species.setDream(dat.get(i));
            species.setImg(R.mipmap.startup);
            mItems.add(species);
          // notifyDataSetChanged();
        }



    }
    class ViewHolder extends RecyclerView.ViewHolder{

        public ImageView mThumbnail;
        public TextView tvspecies;






        public ViewHolder(View itemView) {
            super(itemView);
//            notifyDataSetChanged();
            bee=itemView.getContext();
            itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {


                    be = new DataBaseHandler2(bee);
                    //  be.deleteContact(new Data(RecyclerViewFragment.judul.get(getPosition()),RecyclerViewFragment.detail.get(getPosition())));
                    AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
                    builder.setMessage("Delete this Dream?");
                    String positiveText = "ok";
                    builder.setPositiveButton(positiveText,
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    be.deleteContact(new Data_Dream(GridAdapter.del.get(getPosition())));
                                    Intent ha = new Intent(bee, MainActivity.class);
                                    ((MainActivity) bee).finishAffinity();
                                    bee.startActivity(ha);
                                }
                            });

                    String negativeText = "cansel";
                    builder.setNegativeButton(negativeText,
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    // negative button logic
                                }
                            });
                    AlertDialog b = builder.create();
                    b.show();
                    return true;
                }
            });

            DataBaseHandler2 db = new DataBaseHandler2(itemView.getContext());
            Log.d("Reading: ", "Reading all contacts..");
            List<Data_Dream> contacts = db.getAllContactss();
            mItems = new ArrayList<item>();
            for (Data_Dream cn : contacts) {
                item species = new item();
                species.setDream(cn.getDream());
                dat.add(cn.getDream());
                species.setImg(R.mipmap.startup);
                mItems.add(species);
                String log = "Dream: " + cn.getDream() ;
                // Writing Contacts to log
                Log.d("Name: ", log);

            }
            mThumbnail = (ImageView)itemView.findViewById(R.id.thumbnail_img);
            tvspecies = (TextView)itemView.findViewById(R.id.bigDream);
        }
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.grid_item, viewGroup, false);
        ViewHolder viewHolder = new ViewHolder(v);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int i) {

        item nature = mItems.get(i);
        del.add(nature.getDream());
        viewHolder.tvspecies.setText(nature.getDream());
        viewHolder.mThumbnail.setImageResource(nature.getImg());
    }

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

    }


}

I use sqlite database for this gridlist, it works fine until I delete the first item that I have been added, but after that it throws error :

`java.lang.IndexOutOfBoundsException: Inconsistency detected` Invalid item position 1(offset:1).state:9

What is wrong with my code? Where am I making a mistake?

Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
  • after delete the item always notify to your list and refresh list. problem you are facing bczz.. your list is smaller then before coz you have deleted 1 item and that why it;s throwing error. – Uttam Panchasara Aug 04 '16 at 05:32
  • and there is lost of questions related to thiss try to find out instead of asking question – Uttam Panchasara Aug 04 '16 at 05:33

0 Answers0