4
votes

I am using Recyclerview adapter to populate Recyclerview. After populating Recyclerview from SQLite, If user want to open an recyclerview item need to click on that item and adapter open the related activity. Here is an image which can help you understand easily.

Updating RecyclerView

When an activity is open user can delete that post from SQLite by clicking delete button after deleting data recyclerview should dynamically update data.

3
That's fairly simple. Just call notifyDataSetChanged on your adapter after you've deleted the entry from your database. The list will refresh itself.Pztar
but post can be deleted from another activityHarish Kamboj
That's fine, it doesn't matter where it's deleted from. If your RecyclerView gets destroyed it'll reload the data when you create it and your old entry will no longer be there. If it doesn't get destroyed then use the existing RecyclerView to call notifyDataSetChangedPztar
but I want to show data dynamicallyHarish Kamboj
I don't quite understand what you mean then. Your post says you want to dynamically update the data. notifyDataSetChanged will help you do that. Perhaps if you post some code it'll be easier to diagnose your issue.Pztar

3 Answers

2
votes

You can also use StartActivityForResult and use the result of the second activity for delete item in first one.

I mean:

  1. FirstActivity starts SecondActivity waiting for result
  2. SecondActivity sends the result back to FirstActivity. Only if you delete the item.
  3. Now FirstActivity remove and refresh the list.

In FirstActivity:

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);

In SecondActivity, when you push delete button:

Intent returnIntent = new Intent();
returnIntent.putExtra("delete", true);
returnIntent.putExtra("position", position);
setResult(Activity.RESULT_OK, returnIntent);
finish();

And finally, FirstActivity handle the result:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            if (data.getBooleanExtra("delete") {
                 // get position and delete item from list and refresh
                 int position = data.getIntegerExtra("position");
            }
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
        }
    }
}//onActivityResult

https://stackoverflow.com/a/10407371/1820599

Edited:

Getting the context of your activity inside the adapter constructor:

FirstActivity listener;

public myAdapter(Context context, List<String> items) {
        super(context, R.layout.row_edition, items);

        this.listener = ((FirstActivity) context);
        this.items = items;
    }

Then, inside the adapter, when you push on item, call the activity to start the seconde one:

listener.startSecondActivity(int position, parameters you need to use);

and finally, in your FirstActivity

startSecondActivity(int position, parameters you need to use) {
    // whatever you have to do
    Intent i = new Intent(this, SecondActivity.class);
    // push position inside intent and whatever you need
    startActivityForResult(i, 1);
}

The flow is:

  1. Push item
  2. Use FirstActivityListener to call SecondActivity
  3. In SecondActivity delete and senr result back
  4. In FirstActivity remove item from adapter, using an auxiliar method inside que adapter
1
votes

if you display list of companies in recyclerview once you click to show detailes of company and you delete the company once back you should found the item disappear this what my code do

 protected void onResume()
{
    super.onResume();
    Log.i("TAG", "resume");
    if(yourlist.size() > 0)
    {
        yourlist.clear();
        yourlist.addAll(where your data come from 
        ex:databaseHelper.GetOrganization());
        youradapter.notifyDataSetChanged();
    }
}
0
votes

You must have to implement a listener in your activity, that tells your recycler view that the items has changed. I suppose that you have implemented your own onItemClickListener for recycler view, so you have position and can easily remove item from recycler view data set. For more info, please, post your code.

This listener goes in your class that populate Recycler view.

     public interface DeletedListener {
         void deleted(int position);
     }

Makes your activity implement this listener, and there send what position have to remove.

    public void setListener(DeletedListener listener) {
       this.listener = listener;
    }

    DeletedListener listener;

From your activity call the setListener method, and from adapter, call deleted method.