2015-10-14 6 views
5

ChildViewの選択したチェックボックスの数を示すGroupViewのテキストビューにアクセスしようとしています。 enter image description hereExpandableListViewのgetChildView()からgroupviewのTextViewにアクセスする

たとえば、 - 北はGroupViewで、下のリストはチェックボックスでChildViewです。チェックボックスをクリックするたびにカウント(18)を更新したいと思います。チェックボックスにOnClickListnerを適用しました。 ExpanadableListViewAdapterカスタムはBaseExpandableListAdapterを継承しています。

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.filter_expandable_list_group, 
       parent, false); 

     groupViewHolder = new GroupViewHolder(); 

     groupViewHolder.GroupName = (TextView) convertView.findViewById(R.id.group_name); 
     groupViewHolder.GroupCount = (TextView) convertView.findViewById(R.id.group_count); 
     groupViewHolder.rightArrow = (ImageView) convertView.findViewById(R.id.right_arrow); 

     convertView.setTag(groupViewHolder); 
    }else{ 
     groupViewHolder = (GroupViewHolder) convertView.getTag(); 
    } 
    groupViewHolder.GroupName.setText(((OutletListData) getGroup(groupPosition)).getName()); 
    groupViewHolder.GroupCount.setText(""+((OutletListData) getGroup(groupPosition)).getOutletDatas().size()); 

    return convertView; 
} 

@Override 
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, final ViewGroup parent) { 
    if (convertView == null) { 
     convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.filter_expandable_list_child, 
       parent, false); 

     childViewHolder = new ChildViewHolder(); 

     childViewHolder.childTextView = (TextView) convertView.findViewById(R.id.text1); 
     childViewHolder.childCheckBox = (CheckBox) convertView.findViewById(R.id.checkbox); 

     convertView.setTag(childViewHolder); 
    }else{ 
     childViewHolder = (ChildViewHolder) convertView.getTag(); 
    } 

    childViewHolder.childTextView.setText(((OutletData) getChild(groupPosition, childPosition)).getDealerName()); 
    childViewHolder.childCheckBox.setChecked(((OutletData) getChild(groupPosition, childPosition)).getSelected() == "1"); 
    childViewHolder.childCheckBox.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      boolean isChecked = ((CheckBox) v).isChecked(); 
      ApplicationController.getEventBus().post(((OutletData) getChild(groupPosition, childPosition)).getOutletID()); 
      if (isChecked) { 
       ((OutletData) getChild(groupPosition, childPosition)).setSelected("1"); 
      } else { 
       ((OutletData) getChild(groupPosition, childPosition)).setSelected("0"); 
      } 
     } 
    }); 
    return convertView; 
} 

答えて

3

まず、単純なリストビューではなく、拡張可能なリストビューの例を取る -

は、ここに私のコードスニペットです。 ListViewは、アイテムの束を保持するコンテナです。
これらのアイテムにはそれぞれ、ListViewで行を構成する個々の要素で構成される子ビューがあります。すなわち異なるtextViewsなど
アダプタのgetView()は、データセットに対して動作し、リストに項目を作成します。したがって、アダプターの作成に使用されるデータ・セットを変更してnotifyDatasetChanged()を呼び出すと、リスト・ビューが更新されます。

あなたのケースでは、 "NORTH"のようなオブジェクトを表すためにArrayListを使用している可能性があります。したがって、このオブジェクトにcountの値を格納すると、カウントの更新が容易になります。 groupPositionを使用してリスト内のデータにアクセスし、更新してください。そして、notifyDatasetChangedを呼び出します。今、このアプローチの唯一の制限がある

@Override 
    public void onClick(View v) { 
     boolean isChecked = ((CheckBox) v).isChecked(); 
     ApplicationController.getEventBus().post(((OutletData) getChild(groupPosition, childPosition)).getOutletID()); 
     if (isChecked) { 
      // your code 
      int count = ((OutletListData) getGroup(groupPosition)).getCount(); 
      count++; 
      ((OutletListData) getGroup(groupPosition)).setCount(count); 
      notifyDataSetChanged(); 
     } else { 
      // your code; 
      int count = ((OutletListData) getGroup(groupPosition)).getCount(); 
      count--; 
      ((OutletListData) getGroup(groupPosition)).setCount(count); 
      notifyDataSetChanged(); 

     } 
    } 

レッツは、Object型のArrayListのは、あるあなたは、アダプタgetChildViewでそう

// ArrayList<Object> mList; 
// You created mAdapter from this mList 
// now mList is data set for this adapter 

()あなたが書くの作成にmListを使用言いますその数はObjectの一部でなければなりません。ですから、オブジェクト自体からではなく、他の場所から数えて初めてカウントを初期化する場合は、オブジェクト自体にカウントを格納し、そこからtextViewの値を初期化することをお勧めします。
getGroupView中のSO ()

groupViewHolder.GroupCount.setText(""+((OutletListData) getGroup(groupPosition)).getCount()); 
+2

明確で簡潔な答え! –

関連する問題