ListView не обновляется после изменения базы данных - PullRequest
2 голосов
/ 19 февраля 2012

Я очень расстроен из-за плохого стиля программирования и неопытности в Android.Извините, что сказал вам, ребята.

Как работает приложение:

Это приложение todo для моей профессиональной подготовки.Есть 6 столбцов.3 из них содержат информацию о задачах, а 3 других содержат сведения о просмотре, редактировании и удалении.

Когда пользователь нажимает кнопку удалить по какой-либо причине, даже после установки notifyDataChange, мой экран не обновляетсяи удаленная строка все еще отображается.

Есть идеи, что здесь происходит?Я пробовал много решений в течение 3 часов.

Код выложен здесь, извините, если это немного утомительно.

Весь класс с ListView s:

package com.DCWebMakers.Vairon;

import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.database.DataSetObserver;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class ManageAppointment extends Activity {
    ListView rowLi, whenLi, postedLi, detailsLi, editLi, removeLi;
    ArrayAdapter<String> whenAdapter, postedAdapter, detailsAdapter,
            editAdapter, removeAdapter;
    ArrayAdapter<Integer> rowAdapter;
    final AppointmentInfo information = new AppointmentInfo(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        /*
         * The ListViews created here are not the proper way to make ListViews.
         * This is for testing purposes and will be updated for efficiency. The
         * remove also doesn't work properly
         */

        super.onCreate(savedInstanceState);
        setContentView(R.layout.manage_appointment);
        initVariables();
        try {

            databaseManagement();

            detailsLi.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> aV, View v, int pos,
                        long arg3) {
                    // TODO Auto-generated method stub

                    Intent openDetails = new Intent(
                            "com.DCWebMakers.Vairon.APPOINTMENTDETAILS");
                    openDetails.putExtra("position", pos);
                    startActivity(openDetails);

                }
            });
            editLi.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> aV, View v, int pos,
                        long arg3) {
                    // TODO Auto-generated method stub

                    Intent openEdit = new Intent(
                            "com.DCWebMakers.Vairon.EDITAPPOINTMENT");
                    openEdit.putExtra("position", pos);
                    startActivity(openEdit);
                    notifyChangesToAdapters();

                }
            });

            removeLi.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> aV, View v, int pos,
                        long arg3) {
                    // TODO Auto-generated method stub
                    databaseManagement();

                    information.open();
                    information.delete(pos);
                    information.close();


                    Dialog sucDeleted = new Dialog(ManageAppointment.this);
                    sucDeleted.setTitle("Sucesfully deleted");
                    TextView tvDintWorked = new TextView(ManageAppointment.this);
                    tvDintWorked.setText("The appointment at position:" + pos
                            + " was sucesfully deleted");
                    sucDeleted.setContentView(tvDintWorked);
                    sucDeleted.show();

                    notifyChangesToAdapters();
                }
            });

        } catch (Exception e) {

            Dialog showError = new Dialog(this);
            showError.setTitle("Error");
            TextView tvDintWorked = new TextView(this);
            String error = e.toString();
            tvDintWorked.setText(error);
            showError.setContentView(tvDintWorked);
            showError.show();
        }

    }

    public void initVariables() {
        rowLi = (ListView) findViewById(R.id.rowList);
        whenLi = (ListView) findViewById(R.id.whenList);
        postedLi = (ListView) findViewById(R.id.postedList);
        detailsLi = (ListView) findViewById(R.id.detailsList);
        editLi = (ListView) findViewById(R.id.editList);
        removeLi = (ListView) findViewById(R.id.removeList);
    }

    @Override
    protected void onPause() { // TODO Auto-generated method stub
        super.onPause();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        notifyChangesToAdapters();
    }

    private void notifyChangesToAdapters() {
        // TODO Auto-generated method stub

        rowAdapter.notifyDataSetChanged();
        whenAdapter.notifyDataSetChanged();
        postedAdapter.notifyDataSetChanged();
        detailsAdapter.notifyDataSetChanged();
        editAdapter.notifyDataSetChanged();
        removeAdapter.notifyDataSetChanged();

    }

    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed();
        Intent mainIntent = new Intent("com.DCWebMakers.Vairon.MAINMENU");
        startActivity(mainIntent);
    }

    public void databaseManagement() {
        information.open();
        int primaryKey = information.getKeys();
        String when[] = information.getWhen();
        String posted[] = information.getPosted();
        String details[] = new String[primaryKey];
        Integer rowNumber[] = new Integer[primaryKey];
        String edit[] = new String[primaryKey];
        String delete[] = new String[primaryKey];

        for (int set = 0; set < rowNumber.length; set++) {
            rowNumber[set] = (set);
        }
        for (int set = 0; set < details.length; set++) {
            details[set] = ("Details");
        }
        for (int set = 0; set < edit.length; set++) {
            edit[set] = ("Edit");
        }

        for (int set = 0; set < delete.length; set++) {
            delete[set] = ("Delete");
        }

        information.close();

        rowAdapter = new ArrayAdapter<Integer>(ManageAppointment.this,
                android.R.layout.simple_list_item_1, rowNumber);
        whenAdapter = new ArrayAdapter<String>(ManageAppointment.this,
                android.R.layout.simple_list_item_1, when);
        postedAdapter = new ArrayAdapter<String>(ManageAppointment.this,
                android.R.layout.simple_list_item_1, posted);
        detailsAdapter = new ArrayAdapter<String>(ManageAppointment.this,
                android.R.layout.simple_list_item_1, details);
        editAdapter = new ArrayAdapter<String>(ManageAppointment.this,
                android.R.layout.simple_list_item_1, edit);
        removeAdapter = new ArrayAdapter<String>(ManageAppointment.this,
                android.R.layout.simple_list_item_1, delete);

        rowLi.setAdapter(rowAdapter);
        whenLi.setAdapter(whenAdapter);
        postedLi.setAdapter(postedAdapter);
        detailsLi.setAdapter(detailsAdapter);
        editLi.setAdapter(editAdapter);
        removeLi.setAdapter(removeAdapter);
    }

}

Метод удаления:

public void delete(int position) {
    theDatabase.beginTransaction();
    try {
        theDatabase
                .delete(DATABASE_TABLE, KEY_ROWID + "=" + position, null);
        theDatabase.setTransactionSuccessful();
    } catch (SQLiteException e) {
        // TODO: handle exception
        e.printStackTrace();
    } finally {
        theDatabase.endTransaction();
        theDatabase.close();
    }
}

Ответы [ 2 ]

0 голосов
/ 11 декабря 2013

Вы видели какие-либо исключения при удалении из базы данных. и вам также нужно удалить запись pos из глобального списка перед уведомлением.

0 голосов
/ 19 февраля 2012

до notifyDataSetChanged необходимо удалить запись из List

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...