Android可扩展列表视图与自定义子项

3
我正在尝试实现下面图片中的效果,我认为可扩展列表视图可以帮助我,但它并没有起作用。当展开父级时,什么也不显示。
我使用可扩展列表视图做错了吗?有什么其他的选项吗?
请帮帮我。
编辑:适配器类代码:
`public class ExpandableListAdapter extends android.widget.BaseExpandableListAdapter {`
private Activity context;
private List<String> students;


public ExpandableListAdapter(Activity context, List<String> studentIds) {
     this.context = context;
     this.students = studentIds;
}

public Object getChild(int groupPosition, int childPosition) {
    return null;
}

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

public View getChildView(final int groupPosition, final int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    final String laptop = (String) getChild(groupPosition, childPosition);
    LayoutInflater inflater = context.getLayoutInflater();

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.attendance_view, null);
    }

    CheckBox isPresent = (CheckBox) convertView.findViewById(R.id.is_present);
    EditText absentReason = (EditText) convertView.findViewById(R.id.absent_reason);

    return convertView;
}

public int getChildrenCount(int groupPosition) {
    return 1;
}

public Object getGroup(int groupPosition) {
    return laptops.get(groupPosition);
}

public int getGroupCount() {
    return students.size();
}

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

public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    String studentName= (String) getGroup(groupPosition);
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.group_item,
                null);
    }
    TextView item = (TextView) convertView.findViewById(R.id.studentIds);
    item.setTypeface(null, Typeface.BOLD);
    item.setText(studentName);
    return convertView;
}

public boolean hasStableIds() {
    return true;
}

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

}`


看不到任何代码,但是我认为ExpandableListView是解决方案。 - Björn Hallström
你必须将一个适配器(BaseExpandableListAdapter)绑定到一个列表视图(ExpandableListView)。 - Björn Hallström
你需要为存储设置两个数据级别,不知道你是否正确实现了getChild方法。对于特定的parentIndex和childIndex组合,数据和视图需要是唯一的。你似乎没有填充任何数据。不要只考虑视图,而是要考虑数据。如果你能保持子视图的数据唯一,就不应该有问题。 - Pulkit Sethi
我已经完成了final ExpandableListAdapter expListAdapter = new ExpandableListAdapter(Attendance.this, studentIds); expListView.setAdapter(expListAdapter); - Tushar Agarwal
你是否正确设置了子视图的布局文件?你需要在子视图中使用fill parent,并且需要使用另一种填充方法,其中你需要传递父视图,这样你的子视图才足够大。可能发生的情况是由于数据为空且子视图未填满父视图,所以你看不到任何内容。 - Pulkit Sethi
1个回答

2

首先,我想告诉你,在获取getChildCount方法中应该返回父项的子项数量...

例如,如果您想要两个子项,则getChildCount应返回2。

我会给您准确的工作代码...

package com.example.n_level_list;
import java.util.ArrayList; 
import android.os.Bundle;
import android.animation.ArgbEvaluator;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.MeasureSpec;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.TextView;

public class MainActivity extends Activity {
ExpandableListView mExpandableListView;
public static ArrayList<String> mArrayList,mArrayList2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mExpandableListView=(ExpandableListView)findViewById(R.id.expandableListView1); 
        mArrayList=new ArrayList<String>();
        mArrayList.add("first");
        mArrayList.add("second");
        mArrayList.add("third");
        mArrayList.add("fourth");
        mArrayList.add("fifth");
        Log.i("chk_size", "aa"+mArrayList.size());
          mArrayList2=new ArrayList<String>();

        ParentLevel mParentLevel=new ParentLevel(mArrayList);
        mExpandableListView.setAdapter(mParentLevel);
    }


    public class ParentLevel extends BaseExpandableListAdapter
    {
        ArrayList<String> mArrayList;
        public ParentLevel(ArrayList<String> mArrayList) 
        {
            this.mArrayList=mArrayList;
        }



        public ParentLevel() 
        {
            // TODO Auto-generated constructor stub
        }



        @Override
        public Object getChild(int groupPosition, int childPosition) 
        {
            // TODO Auto-generated method stub
            return childPosition;
        }

        @Override
        public long getChildId(int groupPosition, int childPosition) {
            // TODO Auto-generated method stub
            return childPosition;
        }

        @Override
        public View getChildView(int groupPosition, int childPosition,
                boolean isLastChild, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            CustExpListview SecondLevelexplv = new CustExpListview(MainActivity.this);
            mArrayList2.add("child_first");
            mArrayList2.add("child_second");
            SecondLevelAdapter mSecondLevelAdapter=new SecondLevelAdapter(mArrayList2);
            SecondLevelexplv.setAdapter(mSecondLevelAdapter);
            SecondLevelexplv.setGroupIndicator(null);
            return SecondLevelexplv;
        }

        @Override
        public int getChildrenCount(int groupPosition) {
            // TODO Auto-generated method stub
            return mArrayList2.size();
        }

        @Override
        public Object getGroup(int groupPosition) {
            // TODO Auto-generated method stub
            return groupPosition;
        }

        @Override
        public int getGroupCount() {
            // TODO Auto-generated method stub
            return mArrayList.size();
        }

        @Override
        public long getGroupId(int groupPosition) {
            // TODO Auto-generated method stub
            return groupPosition;
        }

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) 
        {
            LayoutInflater mInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView=mInflater.inflate(R.layout.inflate_activity, null);
            TextView mTextView=(TextView)convertView.findViewById(R.id.textView1); 
            mTextView.setText(mArrayList.get(groupPosition));
            return convertView;
        }

        @Override
        public boolean hasStableIds() {
            // TODO Auto-generated method stub
            return true;
        }

        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            // TODO Auto-generated method stub
            return true;
        }


    }





    public class CustExpListview extends ExpandableListView
    {

        int intGroupPosition, intChildPosition, intGroupid;

        public CustExpListview(Context context) {
               super(context);
        }

        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
               widthMeasureSpec = MeasureSpec.makeMeasureSpec(960,
                            MeasureSpec.AT_MOST);
               heightMeasureSpec = MeasureSpec.makeMeasureSpec(600,
                            MeasureSpec.AT_MOST);
               super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }

    }

    public class SecondLevelAdapter extends BaseExpandableListAdapter
    {
        ArrayList<String> mArrayList2;
        public SecondLevelAdapter(ArrayList<String> mArrayList2) 
        {
             this.mArrayList2=mArrayList2;
        }

        @Override
        public Object getChild(int groupPosition, int childPosition) {
            // TODO Auto-generated method stub
            return childPosition;
        }

        @Override
        public long getChildId(int groupPosition, int childPosition) 
        {
            // TODO Auto-generated method stub
            return childPosition;
        }

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

            return null;
        }

        @Override
        public int getChildrenCount(int groupPosition) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public Object getGroup(int groupPosition) {
            // TODO Auto-generated method stub
            return groupPosition;
        }

        @Override
        public int getGroupCount() {
            // TODO Auto-generated method stub
            return mArrayList2.size();
        }

        @Override
        public long getGroupId(int groupPosition) {
            // TODO Auto-generated method stub
            return groupPosition;
        }

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded,
                View convertView, ViewGroup parent) {
            LayoutInflater mInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView=mInflater.inflate(R.layout.inflate_activity, null);
            TextView mTextView=(TextView)convertView.findViewById(R.id.textView1); 
            mTextView.setText(mArrayList2.get(groupPosition));
            return convertView;
        }

        @Override
        public boolean hasStableIds() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            // TODO Auto-generated method stub
            return false;
        }


    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接