我正在开发 Android
的应用我有不同的类别:
String[] cat = { "Category", "Books", "Clothing", "Shoes", "Hobbies",
"General", "Electronics", "Transportation", "Medicine",
"Sports", "Education", "Outdoor"};
UI要求用户选择一个类别,名称和一些描述,然后将其写入数据库。当用户按下“列表”按钮时,将显示填充的每个类别,并使用 ExpandableListActivity 显示该类别下的项目。
List<List<String>> children = new ArrayList<List<String>>();
/**********************
I have a list for each category!!! But I don't like this solution. :(
**********************/
List<String> books = new ArrayList<String>();
List<String> clothing = new ArrayList<String>();
...
...
public void fillData() {
// Get all of the notes from the database and create the item list
Cursor c = mDbHelper.fetchAllItems();
startManagingCursor(c);
// for all rows
for(int i=0; i<c.getCount(); i++)
{
// next row
c.moveToNext();
// pick a category
String t = c.getString(c.getColumnIndex("category"));
switch (getCat(t))
{
case Books:
books.add(c.getString(c.getColumnIndex("name")));
break;
case Clothing:
// do stuff for Clothing
break;
/**
And there are other cases for the rest of the categories but i am not listing
them here, since it is the same process
*/
default:
break;
} // end switch
} // end for loop
//for each category that has been filled up
children.add(category);
} // end function
我的问题:
是否可以不必为每个类别创建列表?我试过一个列表,但结果看起来不太好。所有类别都显示相同的项目,而不是单个项目,这是有道理的。
答案 0 :(得分:0)
您无需自己创建列表。
您可能希望有2个表 - 一个列出类别名称及其ID(将是主表键)另一个列出每个行具有项目的类别ID,项目名称和其他任何内容的内容项目
然后你可以SimpleCursorTreeAdapter
这样:
SimpleCursorTreeAdapter (Context context, Cursor cursor, int groupLayout, String[] groupFrom, int[] groupTo, int childLayout, String[] childFrom, int[] childTo).
对于groupLayout
,您将拥有android.R.layout.simple_expandable_list_item_1
。对于childLayout
,您将拥有android.R.layout.simple_list_item_1
对于groupFrom
,您将拥有
String [] groupFrom = {FLD_CATEGORY_NAME}; int [] groupTo = {android.R.id.text1};
对于childFrom,您将拥有
String[] childFrom = { FLD_ITEM_NAME };
int[] childTo = { android.R.id.text1 };
或者更确切地说是您自己的布局,如果您想要显示超过1或2个元素
你会有
protected Cursor getChildrenCursor(Cursor groupCursor) {
int categoryId = groupCursor.getColumnIndex(FLD_CATEGORY_ID);
// and here you a Cursor from your items table WHERE CTAEGORY_ID == categoryId
}
答案 1 :(得分:0)
我刚刚创建了一个列表列表,并且工作了:)