拡張可能なリストビューがあります。各子行には TextView と CheckBox があります。チェックボックスをクリックすると、子アイテムに取り消し線が表示され、アイテムが完成したことを示します。グループ内のすべての子アイテムがチェックされている場合、グループ アイテムも取り消し線効果を取得します。少なくともそうすべきです。項目を長押ししてコンテキスト メニューを開き、[終了済みに設定] を選択するか、ジェスチャーを使用して、子項目を終了済みに設定できます。どちらの手順もホルダーの外側にあるため、refreshList() (以下のコードを参照) を呼び出してリストを再作成できます。
グループに 2 人の子供がいるとします。メニューまたはジェスチャーで両方の子を終了に設定しました->グループアイテムは取り消し線効果を受け取ります。わかった。チェックボックスをクリックして子の1つのチェックを外したとしましょう->リストが更新されていないため、グループ項目にはまだ取り消し線効果があります.getGroupViewはアクティブ化されていません。
簡略化されたコード:
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.groupitem, null);
}
TextView title = (TextView) view.findViewById(R.id.groupText);
ImageView tick = (ImageView) view.findViewById(R.id.groupTick);
//if sum of records in the finished column equals the number of records (e.g. 1+1+1 == 3)
if ((grpfinsum == todoItemsgroupsFinished.size()) && (grpfinsum > 0))
{
title.setPaintFlags(title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
tick.setImageDrawable(tick.getResources().getDrawable(R.drawable.btn_finished));
tick.setVisibility(View.VISIBLE);
}
else
{
title.setPaintFlags(title.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));
tick.setVisibility(View.INVISIBLE);
}
}
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null)
{
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.childitem2, null);
holder = new ViewHolder();
holder.cTitle = (TextView) convertView.findViewById(R.id.child_title);
holder.linlay = (LinearLayout) convertView.findViewById(R.id.childlayout);
holder.cText = (TextView) convertView.findViewById(R.id.child_text);
holder.cText2 = (TextView) convertView.findViewById(R.id.child_text2);
holder.checkBox = (CheckBox) convertView.findViewById(R.id.multiple_checkbox);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked)
{
holder.cTitle.setPaintFlags(holder.cTitle.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
HotOrNot entry24 = new HotOrNot(GroceryListsInner2.this);
entry24.open();
entry24.modifyEntryInner(modifiedtablename.replaceAll(" ","_"), todoItemsgroupsID.get(childPosition), "1");
entry24.close();
}
else
{
holder.cTitle.setPaintFlags(holder.cTitle.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));
HotOrNot entry25 = new HotOrNot(GroceryListsInner2.this);
entry25.open();
entry25.modifyEntryInner(modifiedtablename.replaceAll(" ","_"), todoItemsgroupsID.get(childPosition), "0");
entry25.close();
}
}
}
});
public void refreshList() {
groupData.clear();
childData.clear();
groupCheckBox.clear();
childCheckBox.clear();
if (todoItemsgroups.size() > 0) todoItemsgroups.clear();
if (todoItemsgroupsNote.size() > 0) todoItemsgroupsNote.clear();
if (todoItemsgroupsFinished.size() > 0) todoItemsgroupsFinished.clear();
HotOrNot entry = new HotOrNot(this);
entry.open();
Cursor c = entry.getAllTitlesFromInnerListGroupBy(originaltablename);
if (c.moveToFirst())
{
do{
todoItemsgroups.add(c.getString(7));
todoItemsgroupsNote.add(c.getString(4));
}while (c.moveToNext());
}
entry.close();
max = 0;
for (int i = 0; i < todoItemsgroups.size(); i++)
{
Map<String, String> curGroupMap = new HashMap<String, String>();
groupData.add(curGroupMap);
curGroupMap.put(G_TEXT, todoItemsgroups.get(i).replaceAll("_", " "));
List<Map<String, String>> children = new ArrayList<Map<String, String>>();
HotOrNot entry2 = new HotOrNot(this);
entry2.open();
Cursor c2 = entry2.getAllTitlesFromInnerListGroup(originaltablename, todoItemsgroups.get(i));
if (c2.moveToFirst())
{
do{
Map<String, String> curChildMap = new HashMap<String, String>();
children.add(curChildMap);
curChildMap.put(C_TITLE, c2.getString(1).replaceAll("_", " "));
curChildMap.put(C_TEXT, c2.getString(4));
curChildMap.put(C_TEXT2, c2.getString(6));
}while (c2.moveToNext());
}
entry2.close();
if (children.size() > max)
{
max = children.size();
}
childData.add(children);
}
for ( int i = 0; i < todoItemsgroups.size(); i++) {
List<Map<String, Boolean>> childCB = new ArrayList<Map<String,Boolean>>();
for (int j = 0; j < max; j++) {
Map<String, Boolean> curCB = new HashMap<String, Boolean>();
childCB.add(curCB);
curCB.put(C_CB, false);
}
childCheckBox.add(childCB);
}
adapter2.notifyDataSetChanged();
adapter2 = new ExpandBaseAdapter2(GroceryListsInner2.this, groupData, childData, groupCheckBox, childCheckBox);
exList = (ExpandableListView) findViewById(R.id.layoutExListView2);
exList.setAdapter(adapter2);
}
gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
if (todoItemsgroupsID.size() > 0) todoItemsgroupsID.clear();
HotOrNot entry = new HotOrNot(GroceryListsInner2.this);
entry.open();
Cursor c = entry.getAllTitlesFromInnerListGroup(originaltablename, todoItemsgroups.get(groupPosition));
if (c.moveToFirst())
{
do{
todoItemsgroupsID.add(c.getString(0));
}while (c.moveToNext());
}
entry.close();
if (gestureDirection.equals("ltr"))
{
HotOrNot entryG = new HotOrNot(GroceryListsInner2.this);
entryG.open();
entryG.modifyEntryInner(modifiedtablename.replaceAll(" ","_"), todoItemsgroupsID.get(childPosition), "1");
entryG.close();
refreshList();
}
else
{
HotOrNot entryG = new HotOrNot(GroceryListsInner2.this);
entryG.open();
entryG.modifyEntryInner(modifiedtablename.replaceAll(" ","_"), todoItemsgroupsID.get(childPosition), "0");
entryG.close();
refreshList();
}
return true;
}
return false;
}
};