0

我有一个使用 SimpleCursorAdapter 实现 ListView 的活动。ListView 列出了 SQLite 数据库中的项目。问题是我通过按下 MainActivity 中的按钮来实现此活动。如果此时数据库中没有元素,则应用程序崩溃并显示错误“无法恢复活动”。但是,如果数据库中至少有一个元素,则此活动可以正常工作。我想知道如何解决此问题。

这是完整的活动代码。请帮忙。

注意:我在我的其他应用程序之一中做了完全相同的事情,除了您在此处看到的行的替代颜色并且效果很好。

package com.tintin.scheduler_3;

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;

public class List_Course extends ListActivity {
DatabaseHelper db;
SimpleCursorAdapter dataAdapter;

protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.course_list);

    Button add = (Button) findViewById(R.id.add);
    add.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            startActivity(new Intent(List_Course.this, Add_Course.class));
        }
    });
    Log.v("Button", "On Click Done");
    db = new DatabaseHelper(List_Course.this);
    Log.v("Button", "On Click Done2");
    displayList();
    Log.v("Button", "On Click Done3");
    db.close();
}

public void onResume(){
    Cursor newCursor = db.getAllCourses();

    dataAdapter.changeCursor(newCursor);
    super.onResume();
    db.close();
}

public void displayList(){
    Cursor cursor = db.getAllCourses();
    if(cursor.getCount() == 0)return;
    String from [] = new String[] {db.colName,db.colDisplay};
    int to[] = new int[] {R.id.textView1, R.id.textView2};
    dataAdapter = new SimpleCursorAdapter(this, R.layout.listitem, cursor, from, to, 0){
        public View getView(int position, View convertView, ViewGroup parent){
            final View row = super.getView(position, convertView, parent);
            if(position % 2 == 0)   
                row.setBackgroundColor(Color.parseColor("#D8D8D8"));
            else
                row.setBackgroundColor(Color.parseColor("#D0D0D0"));

            return row;
        }
    };
    ListView lv = getListView();
    lv.setAdapter(dataAdapter);
    registerForContextMenu(lv);
    cursor.close();
    db.close();
}

}
4

1 回答 1

0

在您的 onresume mtd super.onResume();调用中必须首先作为

Cursor newCursor = db.getAllCourses();
dataAdapter.changeCursor(newCursor);

执行可能需要更多时间,因此请先调用super.onresume(),然后再调用光标代码。希望这会有所帮助。

于 2013-06-15T11:04:04.377 回答