Listview + Adapter - удалить элемент и обновить, не работает - Android - PullRequest
0 голосов
/ 01 января 2012

этот вопрос похож на этот * Android - элемент списка удаления и Обновить и это (то же самое, но я добавил полный код здесь, чтобы проверить, есть ли у меня проблемы в моем коде):

приведите пример кода.,.

Могу ли я вызвать намерение обновить свой список?

Я не могу обновить свой адаптер с помощью:

adapter.notifyDataSetChanged();

Я пытался:

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

но безуспешно, только один раз (странно ...).

там есть другой ответ:

Call that Activity once again Using Intent

кто-то может дать мне точный код для этого (или для адаптера/ курсор)?

Я пытаюсь это в течение нескольких часов безуспешно.

мой полный код:

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();
}

Ответы [ 2 ]

0 голосов
/ 18 ноября 2013

вместо использования

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

использовать

string str=list.getItemAtPosition(index).toString();
personalresults.remove(str);
adapter.notifyDataSetChanged();
0 голосов
/ 01 января 2012

Внутри onClick of Dialog вы имеете дело с совершенно новым Adapter. Нет привязки адаптера (внутри onClick ()) к listView. Или вы должны сказать list.setAdapter (адаптер);внутри метода onClick () или сделайте адаптер глобальным.

...