ok, so i have been going around in circles for the past couple of days on this problem, unable to find a working solution, perhaps i don't know how to phrase the question right. But here goes.
i am working on a project that is using a RecyclerView adapter, to load and display simple elements from my sqlite database, containing a String quote and a string reference to an image ressource. This part works just fine, but i can't seem to be able to delete any items.
i have gone through the code making sure that the connection to my database is only opened when needed and closed afterwards, and there should be no open issues here.
i can actually delete item from inside the Recyclerview adapter when clicking on a element, but if i exit and enter again, the deleted items have been loaded again. This places my problem with the database i would think, or perhaps some sort of dueling banjos like problems where a functions recreates a deleted item. But i have followed the code numerous times now, and for the life in me, i can't seem to solve the issue.
At the moment in my delete click event i am running a delete call to my database and my recyclerview adapter, but the problem persists.
i was hoping for any input that could help my pinpoint the issue. I am not sure what code to include in this question, i have included my RecyclerView adapter and database adapter. And i know how close to impossible it is to answer these sort of questions without being able to see the code, but still.
*please excuse the mess. i have been trying out a lot of things.
// RECYCLERVIEW ADAPTER
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.DataObjectHolder>
{
private ArrayList<Instance> instanceDataset;
private theClickListener clickListener;
public Context context;
private DBAdapter db;
private Button deleteButton;
private int thePosition;
public RecyclerViewAdapter(Context context)
{
this.context = context;
}
// ViewHolder inner class
class DataObjectHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
CardView cv;
TextView comment;
ImageView imageViewLocalAdapter;
public DataObjectHolder(final View itemView)
{
super(itemView);
cv = (CardView) itemView.findViewById(R.id.cardview_layout);
comment = (TextView) itemView.findViewById(R.id.cardview_textView);
imageViewLocalAdapter = (ImageView) itemView.findViewById(R.id.cardview_imageView);
deleteButton = (Button) itemView.findViewById(R.id.delete_button);
//itemView.setOnClickListener(this);
}
// this here displays the position of item clicked
@Override
public void onClick(View v)
{
//Intent intent = new Intent(context, SingleInstanceFragment.class);
// Log.d(" clicking ", "onClick " + getPosition());
//clickListener.onTheGreatItemClick(getPosition(), v);
}
}
public void setOnItemClickListener(theClickListener clickListener)
{
this.clickListener = clickListener;
}
public RecyclerViewAdapter(ArrayList<Instance> instanceDataSet, Context context)
{
this.instanceDataset = instanceDataSet;
this.context = context;
}
// THE VIEWHOLDER
@Override
public DataObjectHolder onCreateViewHolder(ViewGroup viewGroup, int viewType)
{
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardview, viewGroup, false);
DataObjectHolder dataObjectHolder = new DataObjectHolder(view);
return dataObjectHolder;
}
@Override
public void onBindViewHolder(final DataObjectHolder holder, final int position)
{
final Instance inst = instanceDataset.get(position);
openDB();
thePosition = position;
holder.comment.setText(inst.getComment());
String middle = "/sdcard/unapp/";
Uri uri = Uri.parse("file://" + middle + inst.getImage());
Picasso.with(holder.imageViewLocalAdapter.getContext())
.load(uri)
.fit().centerCrop()
.into(holder.imageViewLocalAdapter);
final RecyclerView.ViewHolder reHolder = holder;
holder.imageViewLocalAdapter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteItem(position);
Log.d("position in ", " RecyclerView Adapter " + position);
onBindViewHolder(holder, position);
// Intent intent = new Intent(context, SingleInstanceActivity.class);
// intent.putExtra("position", position);
//
// context.startActivity(intent);
}
});
}
public void addItem(Instance dataObj, int index)
{
instanceDataset.add(dataObj);
notifyItemInserted(index);
}
public void deleteItem(int index)
{
Log.d("count", "deleteItem " +getItemCount());
instanceDataset.remove(index);
db.deleteRow(index);
db.close();
notifyItemRemoved(index);
//new RecyclerViewAdapter(instanceDataset, context);
Log.d("count", "deleteItem DEUX " +getItemCount());
}
private void openDB()
{
db = new DBAdapter(this.context);
db.open();
}
@Override
public int getItemCount()
{
return instanceDataset.size();
}
public Instance getItem(int position)
{
return instanceDataset.get(position);
}
// clicklistener interface
public interface theClickListener
{
void onTheGreatItemClick(int position, View v);
}
}
// DATABASE ADAPTER
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.DataObjectHolder>
{
private ArrayList<Instance> instanceDataset;
private theClickListener clickListener;
public Context context;
private DBAdapter db;
private Button deleteButton;
private int thePosition;
public RecyclerViewAdapter(Context context)
{
this.context = context;
}
// ViewHolder inner class
class DataObjectHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
CardView cv;
TextView comment;
ImageView imageViewLocalAdapter;
public DataObjectHolder(final View itemView)
{
super(itemView);
cv = (CardView) itemView.findViewById(R.id.cardview_layout);
comment = (TextView) itemView.findViewById(R.id.cardview_textView);
imageViewLocalAdapter = (ImageView) itemView.findViewById(R.id.cardview_imageView);
deleteButton = (Button) itemView.findViewById(R.id.delete_button);
//itemView.setOnClickListener(this);
}
// this here displays the position of item clicked
@Override
public void onClick(View v)
{
//Intent intent = new Intent(context, SingleInstanceFragment.class);
// Log.d(" clicking ", "onClick " + getPosition());
//clickListener.onTheGreatItemClick(getPosition(), v);
}
}
public void setOnItemClickListener(theClickListener clickListener)
{
this.clickListener = clickListener;
}
public RecyclerViewAdapter(ArrayList<Instance> instanceDataSet, Context context)
{
this.instanceDataset = instanceDataSet;
this.context = context;
}
// THE VIEWHOLDER
@Override
public DataObjectHolder onCreateViewHolder(ViewGroup viewGroup, int viewType)
{
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardview, viewGroup, false);
DataObjectHolder dataObjectHolder = new DataObjectHolder(view);
return dataObjectHolder;
}
@Override
public void onBindViewHolder(final DataObjectHolder holder, final int position)
{
final Instance inst = instanceDataset.get(position);
openDB();
thePosition = position;
holder.comment.setText(inst.getComment());
String middle = "/sdcard/unapp/";
Uri uri = Uri.parse("file://" + middle + inst.getImage());
Picasso.with(holder.imageViewLocalAdapter.getContext())
.load(uri)
.fit().centerCrop()
.into(holder.imageViewLocalAdapter);
final RecyclerView.ViewHolder reHolder = holder;
holder.imageViewLocalAdapter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteItem(position);
Log.d("position in ", " RecyclerView Adapter " + position);
onBindViewHolder(holder, position);
// Intent intent = new Intent(context, SingleInstanceActivity.class);
// intent.putExtra("position", position);
//
// context.startActivity(intent);
}
});
}
public void addItem(Instance dataObj, int index)
{
instanceDataset.add(dataObj);
notifyItemInserted(index);
}
public void deleteItem(int index)
{
Log.d("count", "deleteItem " +getItemCount());
instanceDataset.remove(index);
db.deleteRow(index);
db.close();
notifyItemRemoved(index);
//new RecyclerViewAdapter(instanceDataset, context);
Log.d("count", "deleteItem DEUX " +getItemCount());
}
private void openDB()
{
db = new DBAdapter(this.context);
db.open();
}
@Override
public int getItemCount()
{
return instanceDataset.size();
}
public Instance getItem(int position)
{
return instanceDataset.get(position);
}
// clicklistener interface
public interface theClickListener
{
void onTheGreatItemClick(int position, View v);
}
}
Aucun commentaire:
Enregistrer un commentaire