Frage

I have created custom expandable list view with text view and image in group item .I want to hide the group indicator from some of groups in expandable list view .How to solve this problem? here is expandable list 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;
    ExpandableListView exp;
    private int[] parentClickStatus ;
    GroupHolder groupHolder;

    public ExpandableListAdapter(Context context, List<String> listDataHeader,
            HashMap<String, List<String>> listChildData,ExpandableListView exp) {
        this._context = context;
        this._listDataHeader = listDataHeader;
        this._listDataChild = listChildData;
        this.exp=exp;
        parentClickStatus = new int[6];
        setListEvent();
    }
    private void setListEvent() {
            exp.setOnGroupExpandListener(new OnGroupExpandListener() {
              @Override
              public void onGroupExpand(int arg0) {
                    parentClickStatus[arg0] = 0;
                    }
                });

        exp.setOnGroupCollapseListener(new OnGroupCollapseListener() {

                    @Override
                    public void onGroupCollapse(int arg0) {
                        parentClickStatus[arg0] = 1;
                    }
                });
    }



    @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(final 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);
        int colorPos = childPosition % 2;
        if(colorPos==0)
        {
        convertView.setBackgroundColor(Color.MAGENTA);
        }
        else
        {
            convertView.setBackgroundColor(Color.BLUE); 
        }

        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(final int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        String headerTitle = (String) getGroup(groupPosition);
        if (convertView == null) {
            System.out.println("convert view is null");
            LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_group, null);
            groupHolder = new GroupHolder();
            groupHolder.arrowImg = (ImageView) convertView.findViewById(R.id.imageView1);
            groupHolder.lblListHeader = (TextView) convertView.findViewById(R.id.lblListHeader);
            groupHolder.lblListHeader.setTypeface(null, Typeface.BOLD);
            groupHolder.lblListHeader.setText(headerTitle);
            convertView.setTag(groupHolder);
            } else {
                groupHolder = (GroupHolder) convertView.getTag();
               }

        /*if ( getChildrenCount( groupPosition ) == 0 ) {
            groupHolder.arrowImg.setVisibility( View.INVISIBLE );
            } 
        else {
            groupHolder.arrowImg.setImageResource(R.drawable.arrow_down);
            }*/
          if (parentClickStatus[groupPosition] == 0) {
            System.out.println("group position "+groupPosition);
            groupHolder.arrowImg.setImageResource(R.drawable.arrow_up);
            } else {
              System.out.println("else group position "+groupPosition);
            groupHolder.arrowImg.setImageResource(R.drawable.arrow_down);
           }
        return convertView;
    }

    class GroupHolder {
        ImageView arrowImg;
        TextView lblListHeader;
    }


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

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

}
War es hilfreich?

Lösung

  1. Add an ImageView in you list_group.xml
  2. In Adapter check for the condition you want to hide that ImageView.
  3. Get the ImageView through

    ImageView imgV = (ImageVIew )convertView.findViewById(R.id.imgVId);
    
  4. Hide the ImageView with

    imgV.setVisibility(View.INVISIBLE);
    

Andere Tipps

This is the code i have used for solving this issue .

if ( getChildrenCount( groupPosition ) == 0 ) { ((ImageView) convertView.findViewById(R.id.imageView1)).setVisibility( View.INVISIBLE ); } else { ((ImageView) convertView.findViewById(R.id.imageView1)).setVisibility( View.VISIBLE ); ((ImageView) convertView.findViewById(R.id.imageView1)) .setImageResource(isExpanded?R.drawable.arrow_up:R.drawable.arrow_down); }

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top