1

拡張可能なリストビューがあります。各子行には 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; 
             } 
         };
4

0 に答える 0