0

我有一个具有三个级别的 ExpandableListView。在第一级的适配器中,我有呈现 TextView 的 getGroupView,它工作正常。

@Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
             TextView tv = new TextView(context);
             tv.setText(mCountries.get(groupPosition).getName());
             tv.setBackgroundColor(Color.BLUE);
             tv.setPadding(10, 7, 7, 7);
             return tv;
        }

但现在我想把它提升到一个新的水平.. 只是膨胀一个 XML 并且不仅仅是一个 TextView,还有一个 Button;尽管如此,它还是不起作用,因为当我单击一行时它不会展开。这是改编的方法,当然,在构造函数中,我初始化了inflater:

@Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        View v = mInflater.inflate(R.layout.countries_row, null, false);
        mCountryName = (TextView) v.findViewById(R.id.CountryTextView);
        mCountryName.setText(mCountries.get(groupPosition).getName());
        mCountryName.setBackgroundColor(Color.BLUE);
        mCountryName.setPadding(10, 7, 7, 7);
        mCountryExpandButton = (Button) v.findViewById(R.id.CountryExpandButton);
        return v;
    }

mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

任何人都可以请说明为什么它不起作用,以及如何解决它?这真的很奇怪,因为它只是将 TextView 更改为 View ..

提前非常感谢!

4

1 回答 1

0

我这样做:

在活动课上:

public void expandGroup(int groupPosition)
{
    if(expandableListView.isGroupExpanded(groupPosition))
        expandableListView.collapseGroup(groupPosition);
    else
        expandableListView.expandGroup(groupPosition);
}

在类中扩展 BaseExpandableListAdapter:

public View getGroupView(final int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {

    LayoutInflater inflater=LayoutInflater.from(acti);
    View rtnview=inflater.inflate(R.layout.XXX, null);
    TextView text=(TextView)rtnview.findViewById(R.id.tvinfo1);
    text.setText(groupArray.get(groupPosition));
    text.setTextColor(acti.getResources().getColor(R.color.blackcolor));
    text.setTextSize(EDEnv.EEfontSize+3);
    text.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            acti.expandGroup(groupPosition);
        }
    });

    Button btn1=(Button)rtnview.findViewById(R.id.button1);
    btn1.setId(groupPosition);
    btn1.setOnClickListener(new Button.OnClickListener(){
        public void onClick(View v)
        {
            acti.showDialog(1);
        }
    });

    if (convertView == null) {
        convertView = rtnview;
    }

    return convertView;
}

通过这种方式,您可以展开组项目,同时在组项目上有一个按钮来做其他事情。必须有更好的方法来做到这一点。但是我没有时间研究它。

于 2012-09-04T10:32:00.007 回答