コンテンツがデータベースから読み込まれる展開可能なリスト ビューを使用したいと考えています。
コードを書いていますが、適切な出力が得られません。すべての親のすべてのレコードを提供しますが、1 つの親のみに関連する子のみを表示し、それぞれの親に従って他の子を表示したいと考えています。次のような出力が得られました。
日付1
- データ1
- データ2
日付2
- データ1
- データ2
これが問題です。以下のように出力したい
- 日付1
- データ1
- 日付2
- データ2
// 以下はアクティビティクラス
public class FavoriteActivity extends Activity {
/** Final static constant. */
private static final String TAG = "FAVORITE_ACTIVITY";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_favorite);
Cursor mCursor = null;
Cursor mDataCursor = null;
FavoriteNews mFavoriteNews = null;
List<String> mList;
List<FavoriteNews> mFavoriteList = new ArrayList<FavoriteNews>();
mCursor = DBHandler.getData("select DISTINCT " + DBHelper.NEWS_DATE + " from " + DBHelper.FAVOURITE_TABLE + "",
null);
if (mCursor.getCount() != 0) {
mList = new ArrayList<String>();
while (mCursor.moveToNext()) {
mList = new ArrayList<String>();
mDataCursor = DBHandler.getData("select " + DBHelper.NEWS_LABEL + " from " + DBHelper.FAVOURITE_TABLE
+ " where " + DBHelper.NEWS_DATE + "='" + mCursor.getString(0) + "'", null);
if (mDataCursor.getCount() != 0) {
while (mDataCursor.moveToNext()) {
mFavoriteNews = new FavoriteNews();
String news = mDataCursor.getString(0);
mList.add(news);
}
mDataCursor.close();
String date = mCursor.getString(0);
mFavoriteNews.setDate(date);
mFavoriteNews.setFavNews(mList);
}
mFavoriteList.add(mFavoriteNews);
}
try {
ExpandableListView mExList = (ExpandableListView) findViewById(R.id.expandable_list);
mExList.setAdapter(new CustomExpandableAdapter(this, mFavoriteList));
mCursor.close();
} catch (Exception e) {
Log.e(TAG, "Data not found", e);
} finally {
if (mDataCursor != null) {
mDataCursor.close();
}
if (mCursor != null) {
mCursor.close();
}
}
} else {
Toast.makeText(this, "No Favorite Items are Available", Toast.LENGTH_SHORT).show();
}
}
}
//これは私の別のクラスです
public class FavoriteNews {
String date;
List<String> favNews;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public List<String> getFavNews() {
return favNews;
}
public void setFavNews(List<String> favNews) {
this.favNews = favNews;
}
}
// これはアダプタのコードです
public class CustomExToDoAdapter extends BaseExpandableListAdapter{
LayoutInflater inflater;
ArrayList<ToDoTaskList> list;
public CustomExToDoAdapter(Context context,ArrayList<ToDoTaskList> list){
inflater=LayoutInflater.from(context);
this.list=list;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return list.get(groupPosition).getTaskList().get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {
if(convertView==null){
convertView=inflater.inflate(R.layout.child_row, parent,false);
}
TextView childTxt=(TextView) convertView.findViewById(R.id.childItem);
childTxt.setText(list.get(groupPosition).getTaskList().get(childPosition));
childTxt.setPadding(40, 5, 5, 5);
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return list.get(groupPosition).getTaskList().size();
}
@Override
public Object getGroup(int groupPosition) {
return list.get(groupPosition).getDate();
}
@Override
public int getGroupCount() {
return list.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {
if(convertView==null){
convertView=inflater.inflate(R.layout.header_row, parent,false);
}
TextView txtView=(TextView) convertView.findViewById(R.id.header);
txtView.setText(getGroup(groupPosition).toString());
txtView.setPadding(50, 10, 10, 10);
return convertView;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public void registerDataSetObserver(DataSetObserver observer)
{
/* used to make the notifyDataSetChanged() method work */
super.registerDataSetObserver(observer);
//Log.i("TAG","Inside Cons 10");
}
}