Smoker09
Smoker09

Reputation: 127

Listview delete item and Refresh - android

this question is is similar to this - Android - Listview delete item and Refresh .

I cant refresh my adapter with :

adapter.notifyDataSetChanged();

I tried:

adapter.remove(adapter.getItem(pos));

but without success, just one time (weird...).

there is another answer there:

Call that Activity once again Using Intent

sombody can give me the exact code for this (or for the adapter/cursor) ?

I am trying this for a couple of hours without success.

my full code:

protected void onCreate (Bundle SavedInstanceState) {


    super.onCreate(SavedInstanceState);
    setContentView(R.layout.personalmessageview);

    headtitle= getIntent().getExtras().getString("head");

    setTitle(headtitle);


     personalresults = getIntent().getExtras().getStringArrayList("personalres");
     personalresultswithtime = getIntent().getExtras().getStringArrayList("personalrestime"); 



    // setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,personalresults));

     ListView list = (ListView)findViewById(R.id.listview_personal);    
    // ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, personalresults);
     list.setAdapter(adapter);
     registerForContextMenu(list);


     list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
            public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) {


                 String time = personalresultswithtime.get(pos).toString();


                    Show_Alert_box(v.getContext(),"Please select action.",time,pos);


                return true;
            }
        });

public void Show_Alert_box(Context context, String message,String time,int position) final String timestamp = time;

              final int pos = position;

             final AlertDialog alertDialog = new  AlertDialog.Builder(context).create();
                alertDialog.setTitle(getString(R.string.app_name));
                alertDialog.setButton("Delete", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                        try
                        {
                            db = databaseHelper.getWritableDatabase();


                            db.delete("messages","timestamp" + "=?", new String[] { timestamp }); 

                            Log.d("DB"," delete! ");

                           ArrayAdapter<String> adapter = new ArrayAdapter<String>(PersonalMessageView.this, android.R.layout.simple_list_item_1, personalresults);


                                    adapter.remove(adapter.getItem(pos)); //not working t all! why ?

                            list.notify();
                            list.invalidate();


                            personalresults.remove(pos);
                            personalresultswithtime.remove(pos);

                            adapter.notifyDataSetChanged();

                            db.close();




                        }
                        catch(Exception e)
                        {

                        }
                } }); 
                alertDialog.setButton2("Cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        alertDialog.dismiss();
                } }); 

                alertDialog.setMessage(message);
                alertDialog.show();

}

Upvotes: 8

Views: 36687

Answers (10)

Damon
Damon

Reputation: 21

Your issue is that you are creating a new adapter object and calling .notifyDataSetChanged() on that, rather than on the adapter that you have attached to your list view.

Upvotes: 0

Harsh Singhal
Harsh Singhal

Reputation: 567

Try this

Intent intent= getIntent();
            finish();
            startActivity(intent);

Upvotes: -3

Fahad Anjum
Fahad Anjum

Reputation: 1256

@Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();      
        int position = info.position;
        favouriteReportList d;
        d= array_list.get(position);
        switch (item.getItemId()) {
            case R.id.connect:              
                return true;
            case R.id.mark:
                return true;
            case R.id.delete:        
                myFavReport = new DBhandlerReport(this);
                myFavReport.deleteMyFavReport(d.getReportName(), d.getPathName(), myUrl);
                myFavReport.close();
// arrarAdapter is an object of your class.   
                arrayAdapter.remove(arrayAdapter.getItem(info.position));
                arrayAdapter.notifyDataSetChanged();
                return true;                
            default:
                return super.onContextItemSelected(item);
        }
    }

Upvotes: 0

Tom Sengelaub
Tom Sengelaub

Reputation: 359

You probably got it solved but just in case anyone else has the same Problem, here is my Solution:

ArrayAdapter<String> myAdapter = (ArrayAdapter<String>)getListView().getAdapter();
myAdapter.remove(myAdapter.getItem(info.position));
myAdapter.notifyDataSetChanged();

The Problem was that you did not have the Adapter of your List.

Upvotes: 7

Richa
Richa

Reputation: 3193

Try

adapter.remove(adapter.getItem(pos));
notifyDataSetChanged();

Upvotes: 6

Angie
Angie

Reputation: 277

you have to update changes in your DB then you update your arraylist (with a requery or something like since it's deprecated) then you have to call adapter.notifyDataSetChanged();

Upvotes: 2

atrivedi
atrivedi

Reputation: 358

    public class Listview_cls extends Activity implements OnItemClickListener{
            ListView lv;
            String items[]= {"Kolkata","Delhi","Mumbai","Pune"};
            ArrayAdapter adp;
            public void onCreate(Bundle savedInstanceState)
            {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            arr = new ArrayList();
            lv = (ListView) findViewById (R.id.ListView01);
            for(int i=0; i<items.length; i++)
            {
                arr.add(items[i]);
            }
        adp = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr);
        lv.setAdapter(adp);
        lv.setOnItemClickListener(this);
   } 


   public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) 
   {    

    adp.remove(adp.getItem(arg2));
        adp.notifyDataSetChanged();

    }
}

Upvotes: 0

askimp
askimp

Reputation: 155

make function to bind your adapter with Listview and just call again that function while deletion completed so that Listview filled again and you get refreshed list.
Are u using database ?

Upvotes: 2

Rakhita Wickramatunge
Rakhita Wickramatunge

Reputation: 4503

try using listview.invalidateViews(); after adapter.remove(adapter.getItem(pos));

Upvotes: 2

Rajdeep Dua
Rajdeep Dua

Reputation: 11230

Invalidate the List View after the data change, inside your ListActivity use the following lines when data is changed

 getListView().invalidate();

Upvotes: 3

Related Questions