简体   繁体   English

Android-如何更改可扩展listView中单个孩子的背景颜色?

[英]Android - how can change background color of a single child in expandable listView?

i want to change the background color of a child of my Expandable list View outside the onChildClick() method in my activity. 我想更改活动中onChildClick()方法之外的Expandable list View的子项的背景颜色。 here is my adapter 这是我的适配器

public class ExpandableListAdapter extends BaseExpandableListAdapter {

private Context _context;
private List<String> _listDataHeader; // header titles
// child data in format of header title, child title
private HashMap<String, List<String>> _listDataChild;

public ExpandableListAdapter(Context context, List<String> listDataHeader,
                             HashMap<String, List<String>> listChildData) {
    this._context = context;
    this._listDataHeader = listDataHeader;
    this._listDataChild = listChildData;
}

@Override
public Object getChild(int groupPosition, int childPosititon) {
    return this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .get(childPosititon);
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

@Override
public View getChildView(int groupPosition, final int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {

    final String childText = (String) getChild(groupPosition, childPosition);

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_item, null);
    }

    TextView txtListChild = (TextView) convertView
            .findViewById(R.id.lblListItem);

    txtListChild.setText(childText);
    return convertView;
}

@Override
public int getChildrenCount(int groupPosition) {
    return this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .size();
}

@Override
public Object getGroup(int groupPosition) {
    return this._listDataHeader.get(groupPosition);
}

@Override
public int getGroupCount() {
    return this._listDataHeader.size();
}

@Override
public long getGroupId(int groupPosition) {
    return groupPosition;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
                         View convertView, ViewGroup parent) {
    String headerTitle = (String) getGroup(groupPosition);
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_group, null);
    }

    TextView lblListHeader = (TextView) convertView
            .findViewById(R.id.lblListHeader);
    lblListHeader.setTypeface(null, Typeface.BOLD);
    lblListHeader.setText(headerTitle);

    return convertView;
}

@Override
public boolean hasStableIds() {
    return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}

i should use getChildView? 我应该使用getChildView吗? like expListView.getExpandableListAdapter().getChildView(0,1, ?, ?, ? ).setBackgroundColor(Color.BLUE); expListView.getExpandableListAdapter().getChildView(0,1, ?, ?, ? ).setBackgroundColor(Color.BLUE); can someone please give me an example? 有人可以给我一个例子吗?

According to list item recycling by the system you'd never be able to determine the child item position pr get the item view itself to set it's background 根据系统对清单物料的回收,您永远无法确定子物料的位置pr获取物料视图本身以设置其背景

So, You would have to do the following; 因此,您将必须执行以下操作;

1- create an object model for child items data 2- give it a boolean attribute isColored 3- in your getChildView() do the following: 1-为子项数据创建一个对象模型2-为其提供布尔属性isColored 3-在getChildView()中执行以下操作:

 if (listDataHeader.get(groupPosition).getSessionsList().get(childPosition).isColored()) {
        convertView.setBackgroundColor(Color.parseColor(color));
        notifyDataSetChanged();
    } else {
        convertView.setBackgroundColor(context.getResources().getColor(R.color.white));
        notifyDataSetChanged();
    }

if the object isColored is true give it a color, if not give it the default color to avoid other items getting tinted according to recycling 如果对象isColored为true,则为其提供颜色,否则,将其设置为默认颜色,以避免其他项目因回收而着色

wish my answered help 希望我回答的帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在可扩展ListView Android中更改单击子项的背景颜色 - Change Background Color of Clicked Child in Expandable ListView Android 在onChildClick()方法之外更改Expandable ListView Android中被单击子项的背景颜色 - Change Background Color of Clicked Child in Expandable ListView Android outside the onChildClick() method 当在扩展列表视图中单击“子项”中的按钮时,Android更改父项的背景 - Android Change Background of Parent when Button in Child is clicked in Expandable ListView 我可以在android的可扩展列表视图中更改子行的背景颜色吗 - Can I change the background color of child row on expandable list view in android 如何在Android中的不同可扩展ListView组中具有不同的背景颜色 - How I can have different background color in different expandable ListView Group in Android 如何在android中的expandable listview中设置子项限制 - How to set a limit for the child in expandable listview in android 如何在Android的Expandable ListView的子项中添加imagebutton? - How to Add imagebutton to child of Expandable ListView on Android? 如何在展开式列表视图中添加子项? 安卓系统 - How to add Child Item in an expandable listview? Android 如何在android中获取可扩展listview的子值? - how to get child value of expandable listview in android? 如何在Android中设置可扩展列表的背景颜色 - How to set Background color of expandable List in android
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM