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?