【发布时间】:2011-06-29 19:54:32
【问题描述】:
耶,编码太有趣了。这是我第三次尝试创建链接到 sqllite 数据库的 ExpandableListView。上一个版本在检索数据时工作正常,但在我需要删除或编辑项目时效果不佳。它基于 Api Demo、expandableListView 1 和 2。Api 代码建议我将我的信息存储在一个数组中,然后才能将其放入 ExpandablelistView。我认为我们都可以看到删除和更新存储在数组中的项目的问题。我决定重新开始,用更干净的东西。
以下代码是我尝试创建一个用 sqllite db 值填充可扩展列表视图的活动。但是,活动开始时什么都没有发生,甚至没有异常。
我认为我的问题在于browseView.setAdapter(mAdapter);但我真的不知道我在说什么,也没有办法证明!如果我将上面的内容更改为 listadapter,则会引发 nullpointerexception。
最后,应该注意的是,我的 getChildren 光标直接通过了我的 groupCursor。这只是因为我还没有弄清楚这里有什么!婴儿步。
我在正确的轨道上吗?谢谢参观。
public class BrowseActivity extends ExpandableListActivity {
final private String[] asColumnsToReturn = {
Items.ITEMS_TABLE_NAME + "." + Items.ITEMS_ITEM,
Items.ITEMS_TABLE_NAME + "." + Items.ITEMS_DESC,
Items.ITEMS_TABLE_NAME + "." + Items.ITEMS_ID };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.browse);
DbHelper dbh = new DbHelper(this.getApplicationContext());
SQLiteDatabase db = dbh.getWritableDatabase();
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(Items.ITEMS_TABLE_NAME);
ExpandableListView browseView = (ExpandableListView)findViewById(android.R.id.list);
Cursor mCursor = queryBuilder.query(db, asColumnsToReturn, null, null,
null, null, Items.DEFAULT_SORT_ORDER);
startManagingCursor(mCursor);
SimpleCursorTreeAdapter mAdapter = new SimpleCursorTreeAdapter(this,
mCursor, R.layout.row, R.layout.exprow,
new String[] { Items.ITEMS_ITEM }, new int[] { R.id.txtItem },
R.layout.exprow, R.layout.exprow, new String[] { Items.ITEMS_DESC },
new int[] { R.id.dscItem }) {
@Override
protected Cursor getChildrenCursor(Cursor groupCursor) {
return groupCursor;
}
};
browseView.setAdapter(mAdapter);
}
}
***START NEW OF NEW CLASS FILE***
public class DbHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DB_NAME = "itemList.db";
DbHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL("CREATE TABLE " + Items.ITEMS_TABLE_NAME + " ("
+ BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT ,"
+ Items.ITEMS_ITEM + " TEXT," + Items.ITEMS_DESC + " TEXT,"
+ Items.ITEMS_MANU + " TEXT," + Items.ITEMS_UPC + " TEXT," +
Items.ITEMS_NWEIGHT + " TEXT," + Items.ITEMS_AWEIGHT + " TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
@Override
public void onOpen(SQLiteDatabase db){
super.onOpen(db);
}
}
***START OF NEW CLASS FILE***
public class ItemDatabase {
private ItemDatabase() {
}
public static final class Items implements BaseColumns {
private Items() {
}
public static final String ITEMS_TABLE_NAME = "table_itemList";
public static final String ITEMS_ID = "_id";
public static final String ITEMS_ITEM = "item";
public static final String ITEMS_DESC = "description";
public static final String ITEMS_MANU = "manufacturer";
public static final String ITEMS_UPC = "upc";
public static final String ITEMS_NWEIGHT = "netweight";
public static final String ITEMS_AWEIGHT = "actualweight";
public static final String DEFAULT_SORT_ORDER = "item ASC";
}
以及“浏览”xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical">
<ExpandableListView
android:id = "@android:id/list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:clickable="true"
></ExpandableListView>
</LinearLayout>
【问题讨论】:
-
我在这里做类似的事情stackoverflow.com/questions/10611927/…
标签: android expandablelistview