2015-10-14 67 views
5

我試圖訪問GroupView的Textview,它顯示了ChildView中所選複選框的計數。 enter image description here從ExpandableListView的getChildView()訪問groupview的TextView

對於eg - North是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是容納一堆Items的容器。
這些項目都具有子視圖,這些子視圖由組成ListView中的一行的各個元素組成。即不同的文本視圖等。
適配器的getView()對數據集進行操作,然後在列表中創建項目。因此,如果您更改用於創建適配器的數據集並調用notifyDatasetChanged(),那麼它將更新列表視圖。

現在在你的情況下, 您可能正在使用ArrayList來表示像「NORTH」這樣的對象。所以如果你在這個對象中存儲count的值,那麼計數的更新將很容易。 只需使用groupPosition訪問列表中的數據並更新它。並調用notifyDatasetChanged。

比方說您使用mList這是Object類型的ArrayList中,以創建適配器

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

所以在getChildView()你寫:

@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的一部分。因此,如果您是從其他位置初次計算初始值,而不是從Object本身開始計數,那麼我會建議您將Count存儲在Object本身中,並從那裏初始化textView的值。
所以在getGroupView()

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

簡單明瞭的答案! –