BaseExpandableListAdapter に関連付けられた ExpendableListView があります。このリストでは、ユーザーが子をクリックすると、いくつかのメソッドがトリガーされ、checkBox がオンに設定されます (ユーザーがもう一度クリックしても、chackBox はオフになります)。
onChildClick メソッドを適切に使用できるようにするために、android:enabled="false"
多数の投稿で示唆されているように、checkBox を に設定しました。
問題は、チェックボックスが自動的に灰色になり、チェックされているかどうかにかかわらずです。アクティビティの動作には影響しませんが、あまり視覚的ではありません (チェックが薄緑色の場合とは異なります)。
色付きのチェックボックスを使用して、まったく同じ動作を維持するにはどうすればよいですか?
android:enabled="false"
または、言い換えれば、ビューの色を使用して保持することは可能ですか (そして簡単ですか) ?
checkBox の xml コードは次のとおりです。
<CheckBox android:id="@+id/config_can_spn_checkbox"
android:layout_marginRight="30dip"
android:layout_weight="1"
android:layout_width="0dip"
android:layout_height="match_parent"
android:enabled="false"
android:focusable="false" />
BaseExpandableListAdapter クラス:
public class ConfigCanAdapter extends BaseExpandableListAdapter {
private Context context;
private List<Pgn> pgnList;
private LayoutInflater inflater;
public ConfigCanAdapter(Context context, List<Pgn> pgnList) {
this.context = context;
this.pgnList = pgnList;
inflater = LayoutInflater.from(context);
}
@Override
public boolean areAllItemsEnabled() {
return true;
}
public Spn getChild(int gPosition, int cPosition) {
return pgnList.get(gPosition).getSpnList().get(cPosition);
}
public long getChildId(int gPosition, int cPosition) {
return cPosition;
}
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final Spn spn = (Spn) getChild(groupPosition, childPosition);
ChildViewHolder childViewHolder;
if (convertView == null) {
childViewHolder = new ChildViewHolder();
convertView = inflater.inflate(R.layout.group_child, null);
childViewHolder.textViewChildSpnName = (TextView) convertView.findViewById(R.id.config_can_spn_name_text);
childViewHolder.textViewChildSpnUnit = (TextView) convertView.findViewById(R.id.config_can_spn_unit_text);
childViewHolder.checkBoxChildSpn = (CheckBox) convertView.findViewById(R.id.config_can_spn_checkbox);
convertView.setTag(childViewHolder);
} else {
childViewHolder = (ChildViewHolder) convertView.getTag();
}
childViewHolder.textViewChildSpnName.setText(spn.getName());
childViewHolder.textViewChildSpnUnit.setText("(" + spn.getUnit() + ")");
return convertView;
}
public int getChildrenCount(int gPosition) {
return pgnList.get(gPosition).getSpnList().size();
}
public Object getGroup(int gPosition) {
return pgnList.get(gPosition);
}
public int getGroupCount() {
return pgnList.size();
}
public long getGroupId(int gPosition) {
return gPosition;
}
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupViewHolder gholder;
Pgn pgn = (Pgn) getGroup(groupPosition);
if (convertView == null) {
gholder = new GroupViewHolder();
convertView = inflater.inflate(R.layout.group_row, null);
gholder.textViewGroup = (TextView) convertView.findViewById(R.id.TVGroup);
convertView.setTag(gholder);
} else {
gholder = (GroupViewHolder) convertView.getTag();
}
gholder.textViewGroup.setText(pgn.getId());
return convertView;
}
public boolean hasStableIds() {
return true;
}
public boolean isChildSelectable(int arg0, int arg1) {
return true;
}
class GroupViewHolder {
public TextView textViewGroup;
}
class ChildViewHolder {
public TextView textViewChildSpnName;
public TextView textViewChildSpnUnit;
public CheckBox checkBoxChildSpn;
}
}
そして最後に onChildClickListener :
expandableList.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stub
CheckBox cb = (CheckBox)v.findViewById(R.id.config_can_spn_checkbox);
cb.toggle();
Toast.makeText(getBaseContext(), "Group = " + String.valueOf(groupPosition) + " child = " + String.valueOf(childPosition), Toast.LENGTH_SHORT).show();
return false;
}
});