ListView не обновляется после вставки данных через Android DialogBox? - PullRequest
1 голос
/ 16 сентября 2011

Привет всем У меня есть listview, который отображает список элементов из базы данных sqlite.С помощью DialogBox вставляю данные в БД.Вставка выполнена успешно.Но если я ввел данные в DialogBox и нажал кнопку «ОК», данные, вставленные в БД, но вставленные данные, не отображаются в ListView.

ListView не обновляется .... Я использовал adapter.setNotifyOnChange(true);.Но это никак не повлияет на просмотр списка.

И я получил предупреждение на logcat как

`09-16 15:01:10.215: INFO/dalvikvm(2066): Uncaught exception thrown by finalizer (will be discarded):
09-16 15:01:10.215: INFO/dalvikvm(2066): Ljava/lang/IllegalStateException;: Finalizing cursor android.database.sqlite.SQLiteCursor@44c4be28 on PAYMENT_TABLE that has not been deactivated or closed
09-16 15:01:10.215: INFO/dalvikvm(2066):     at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:596)
09-16 15:01:10.215: INFO/dalvikvm(2066):     at dalvik.system.NativeStart.run(Native Method)`

Но я закрыл курсор в OnDestory ()

Вот мой код.

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    mySQLiteAdapter = new SQLiteAdapter(this);         
    mySQLiteAdapter.openToWrite();
    cursor = mySQLiteAdapter.queueAll();

    cursor.moveToFirst();
    while(!cursor.isAfterLast()) {          
        String mTitleRaw = cursor.getString(cursor.getColumnIndex(SQLiteAdapter.KEY_PAYMENT_TYPE));
        al.add(mTitleRaw);
        cursor.moveToNext();
        }    

    adapterChanged();
}

@SuppressWarnings("unchecked")
private void adapterChanged() {
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_multiple_choice, al);

    adapter.setNotifyOnChange(true);
    setListAdapter(adapter);

    listContent = getListView();
    listContent.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);
    //Object o = this.getListAdapter().getItem(position);
}

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    if (mySQLiteAdapter != null) {
        mySQLiteAdapter.close();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub
    menu.add(0, MENU_ADD, 0, "Add New");                
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch(item.getItemId()) {      
    case MENU_ADD:
        AlertMsg();         
        return true;        
    }
    return super.onOptionsItemSelected(item);
}

private void updateList(){
    cursor.requery();
    }   

public void AlertMsg() {
    AlertDialog.Builder alert = new AlertDialog.Builder(this);
    alert.setTitle("Payment Type");
    alert.setMessage("Add field");
    final EditText mTxt = new EditText(this);
    alert.setView(mTxt);
    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub              
            String mNewField = mTxt.getText().toString();
            //Toast.makeText(getApplicationContext(), "Item " + mNewField + " Added", Toast.LENGTH_LONG).show();
            mySQLiteAdapter.insert(mNewField);
            updateList();

            adapterChanged();
        }
    });
    alert.show();
}

}

Это эффективный способ ....

Может кто-нибудь PLS дать некоторые предложения .....

Спасибо ......

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