【发布时间】:2018-07-29 20:58:59
【问题描述】:
我正在尝试制作一个消耗性列表视图,其中标题文本从“器官特征”列中提取,子文本从 pharynx 列中提取,这是我的数据库结构:
我希望器官特征仅在其子列表(= 咽列中的实例)不为空时才显示为标题。 这是我目前得到的(如你所见,咽列中的静脉引流是空的,但仍显示为标题,我不希望这样):
我认为我应该添加一个语句“if(DATABASECHILD_1 != null)”或类似的东西..
感谢您的帮助!
数据库.Java
package ma.ac.iav.learn;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
public class Database {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "URTdd.db";
private static final String DATABASE_TABLE = "OrganAnatomy";
public static final String DATABASE_ID = "_id";
public static final String DATABASE_GROUP_1 = "Organ_features";
public static final String DATABASE_CHILD_1 = "Pharynx";
private final Context mContext;
private DatabaseHelper mDatabaseHelper;
private SQLiteDatabase mDB;
public Database(Context context) {
mContext = context;
}
public void open() {
mDatabaseHelper = new DatabaseHelper(mContext, DATABASE_NAME, null, DATABASE_VERSION);
mDB = mDatabaseHelper.getWritableDatabase();
}
public void close() {
if (mDatabaseHelper != null) mDatabaseHelper.close();
}
public Cursor getDatabase() {
return mDB.query(DATABASE_TABLE, null, null, null, null, null, DATABASE_GROUP_1);
}
public Cursor getID(long rowID) {
return mDB.query(DATABASE_TABLE, null, "_id" + " = "
+ rowID, null, null, null, null);
}
public class DatabaseHelper extends SQLiteAssetHelper {
public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
}
}
MainActivity.java
package ma.ac.iav.learn;
import android.content.Context;
import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ExpandableListView;
import android.widget.SimpleCursorTreeAdapter;
public class MainActivity extends AppCompatActivity {
ExpandableListView expandableListView;
Database mDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
"Called when the database has been opened."
https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#onOpen(android.database.sqlite.SQLiteDatabase)
*/
mDatabase = new Database(this);
mDatabase.open();
/*
"This interface provides random read-write access to the result set returned by a database query."
https://developer.android.com/reference/android/database/Cursor.html
*/
Cursor cursor = mDatabase.getDatabase();
startManagingCursor(cursor);
/*
"A list of column names that will be used to display the data for a group."
"The group views (from the group layouts) that should display column in the "from" parameter."
"A list of column names that will be used to display the data for a child."
"The resource identifier of a layout file that defines the views for a child."
https://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.html#SimpleCursorTreeAdapter(android.content.Context, android.database.Cursor, int, java.lang.String[], int[], int, java.lang.String[], int[])
*/
String[] groupFrom = {
Database.DATABASE_GROUP_1,
};
int[] groupTo = {
R.id.group1,
};
String[] childFrom = new String[]{
Database.DATABASE_CHILD_1,
};
int[] childTo = {
R.id.child1,
};
/*
"An easy adapter to map columns from a cursor to TextViews or ImageViews defined in an XML file."
https://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.html
*/
SimpleCursorTreeAdapter simplecursortreeAdapter = new ExpandableListViewAdapter(
this,
cursor,
R.layout.list_group,
groupFrom,
groupTo,
R.layout.list_child,
childFrom,
childTo
);
/*
"Finds a view that was identified by the android:id XML attribute that was processed in onCreate(Bundle)."
"Sets the adapter that provides data to this view."
https://developer.android.com/reference/android/app/Activity.html#findViewById(int)
https://developer.android.com/reference/android/widget/ExpandableListView.html#setAdapter(android.widget.ExpandableListAdapter)
*/
expandableListView = findViewById(R.id.expandableListview);
expandableListView.setAdapter(simplecursortreeAdapter);
}
/*
"Closes the Cursor, releasing all of its resources and making it completely invalid."
https://developer.android.com/reference/android/database/Cursor.html#close()
*/
protected void onDestroy() {
super.onDestroy();
mDatabase.close();
}
private class ExpandableListViewAdapter extends SimpleCursorTreeAdapter {
private ExpandableListViewAdapter(
Context context,
Cursor cursor,
int groupLayout,
String[] groupFrom,
int[] groupTo,
int childLayout,
String[] childFrom,
int[] childTo) {
super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childFrom, childTo);
}
/*
"Gets the Cursor for the children at the given group."
https://developer.android.com/reference/android/widget/CursorTreeAdapter.html#getChildrenCursor(android.database.Cursor)
*/
protected Cursor getChildrenCursor(Cursor groupCursor) {
return mDatabase.getID(groupCursor.getInt(groupCursor.getColumnIndex(Database.DATABASE_ID)));
}
}
}
【问题讨论】:
标签: android sqlite expandablelistview