Android ExpandableListView子高度为零或不够

Android ExpandableListView子高度为零或不够,android,layout,height,expandablelistview,expandablelistadapter,Android,Layout,Height,Expandablelistview,Expandablelistadapter,编辑:不要将ListView放在可展开视图中。这是第一个问题。第二个问题是我的图表的高度始终为零。(详细查看) 这些就是问题所在。对于ListView,我只使用文本视图,并使用For循环将值放入其中。 对于图形问题,我检查设备的像素值并设置LayoutParameters,这取决于它是纵向还是横向。这是我用于它的代码。它在我将使用的设备上提供了良好的值,但可能有更好的解决方案 int orientation = getResources().getConfiguration().orientat

编辑:不要将ListView放在可展开视图中。这是第一个问题。第二个问题是我的图表的高度始终为零。(详细查看) 这些就是问题所在。对于ListView,我只使用文本视图,并使用For循环将值放入其中。 对于图形问题,我检查设备的像素值并设置LayoutParameters,这取决于它是纵向还是横向。这是我用于它的代码。它在我将使用的设备上提供了良好的值,但可能有更好的解决方案

int orientation = getResources().getConfiguration().orientation;
DisplayMetrics metrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height=metrics.heightPixels;
int width = metrics.widthPixels;
if (orientation == 1) {
    SGV.setLayoutParams(new LayoutParams(width, height/4));
} else {
    SGV.setLayoutParams(new LayoutParams(width, height/2));
}
我正在实现一个ExpandableListView,它有两个不同类型的子视图,一个是视图,一个是listview。我使用两个不同的布局文件,所以我有两个子布局,分别是child_list.xml和child_img.xml

问题是,如果我不设置布局宽度和高度,它会为视图提供正常宽度,但为0高度,为listview提供正常宽度,而为listview提供的高度不够,因此我只能看到listview的一个元素。但是,如果我将LayoutParameters设置为(1200400),它会显示所有listview元素

如果不设置高度或宽度,如何显示所有列表元素

主布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/distance_fragment_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >

<ExpandableListView
    android:id="@+id/expandableList"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:groupIndicator="@null" >
</ExpandableListView> 
</LinearLayout>

Group.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/groupName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView"
    android:textSize="50sp" />

</LinearLayout>

children_list.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

  <ListView
        android:id="@+id/child_listView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         >
    </ListView>
</LinearLayout>

儿童列表


MyExpandableListViewAdapter

public class ExpandableListItems extends BaseExpandableListAdapter {
    private Context context;
    private ArrayList<String> mParent;

    public ExpandableListItems(Context context, ArrayList<String> parent) {
        mParent = parent;
        this.context = context;
    }


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

    @Override
    public int getChildrenCount(int i) {
        return 1;
    }

    @Override
    public String getGroup(int i) {
        return mParent.get(i);
    }

    @Override
    public Object getChild(int i, int i1) {
        return mParent.get(i);
    }

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

    @Override
    public long getChildId(int i, int i1) {
        return i1;
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }
    @Override
    public boolean isChildSelectable(int i, int i1) {
        return true;
    }

    @Override
    public void registerDataSetObserver(DataSetObserver observer) {
        super.registerDataSetObserver(observer);
    }


    @Override
    public View getChildView(int groupPosition, int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if(groupPosition == 1){
        convertView = inflater.inflate(R.layout.distance_child_img, null);
        ViewGroup graphArea = (ViewGroup)convertView.findViewById(R.id.testw);
        SpeedGraphView SGV = new                                                    SpeedGraphView(getActivity().getBaseContext());
            SGV.setArrays(homefirstHalfSpeedArray,homesecondHalfSpeedArray,Global.app.match.homeTeam.getTeamName());
            SGV.setPlayerArrays(awayfirstHalfSpeedArray,awaysecondHalfSpeedArray,Global.app.match.awayTeam.getTeamName());
            SGV.setLayoutParams(new LayoutParams(1200, 400));
            graphArea.addView(SGV);

        }else{
            convertView = LayoutInflater.from(getActivity()).inflate(R.layout.distance_child_list, null);

             ListView listV = (ListView) convertView.findViewById(R.id.child_listView);
             ListAdapter adp = new ListAdapter(getActivity());
             adp.add(new ListItem("Deneme", "Away", 200, 100));
             adp.add(new ListItem("asdas", "Away", 200, 100));
             listV.setAdapter(adp);
            // listV.setLayoutParams(new LinearLayout.LayoutParams(1200,500));
        }
        return convertView;
    }


    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.distance_group, null);
        TextView tx = (TextView)convertView.findViewById(R.id.groupName);
        tx.setText(ExpListItems.get(groupPosition));
        return convertView;
    }
}
公共类ExpandableListItems扩展了BaseExpandableListAdapter{
私人语境;
私人律师事务所;
公共可扩展列表项(上下文、ArrayList父级){
mParent=父母;
this.context=上下文;
}
@凌驾
public int getGroupCount(){
返回mParent.size();
}
@凌驾
公共整数getChildrenCount(整数i){
返回1;
}
@凌驾
公共字符串getGroup(int i){
返回mParent.get(i);
}
@凌驾
公共对象getChild(inti,inti1){
返回mParent.get(i);
}
@凌驾
公共长getGroupId(inti){
返回i;
}
@凌驾
公共长getChildId(inti,inti1){
返回i1;
}
@凌驾
公共布尔表ID(){
返回true;
}
@凌驾
公共布尔值是可选择的(int i,int i1){
返回true;
}
@凌驾
公共无效注册表DataSetObserver(DataSetObserver observer){
超级注册数据集观察者(观察者);
}
@凌驾
公共视图getChildView(int-groupPosition、int-childPosition、,
布尔值isLastChild、视图转换视图、视图组父级){
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
if(groupPosition==1){
convertView=充气机。充气(R.布局。距离\u子对象\u img,空);
ViewGroup graphArea=(ViewGroup)convertView.findViewById(R.id.testw);
SpeedGraphView SGV=新的SpeedGraphView(getActivity().getBaseContext());
setArray(homefirstHalfSpeedArray、homesecondHalfSpeedArray、Global.app.match.homeTeam.getTeamName());
setPlayerArray(awayfirstHalfSpeedArray、awaysecondHalfSpeedArray、Global.app.match.awayTeam.getTeamName());
SGV.setLayoutParams(新的LayoutParams(1200400));
graphArea.addView(SGV);
}否则{
convertView=LayoutInflater.from(getActivity()).flate(R.layout.distance\u child\u list,null);
ListView listV=(ListView)convertView.findViewById(R.id.child\u ListView);
ListAdapter adp=新的ListAdapter(getActivity());
adp.add(新列表项(“Deneme”,“Away”,200100));
adp.add(新列表项(“asdas”,“离开”,200,100));
listV.setAdapter(adp);
//listV.setLayoutParams(新的LinearLayout.LayoutParams(1200500));
}
返回视图;
}
@凌驾
公共视图getGroupView(int-groupPosition,布尔值isExpanded,
视图(视图、视图组父级){
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
convertView=充气机。充气(R.layout.distance_组,空);
TextView tx=(TextView)convertView.findViewById(R.id.groupName);
tx.setText(ExpListItems.get(groupPosition));
返回视图;
}
}
public class ExpandableListItems extends BaseExpandableListAdapter {
    private Context context;
    private ArrayList<String> mParent;

    public ExpandableListItems(Context context, ArrayList<String> parent) {
        mParent = parent;
        this.context = context;
    }


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

    @Override
    public int getChildrenCount(int i) {
        return 1;
    }

    @Override
    public String getGroup(int i) {
        return mParent.get(i);
    }

    @Override
    public Object getChild(int i, int i1) {
        return mParent.get(i);
    }

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

    @Override
    public long getChildId(int i, int i1) {
        return i1;
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }
    @Override
    public boolean isChildSelectable(int i, int i1) {
        return true;
    }

    @Override
    public void registerDataSetObserver(DataSetObserver observer) {
        super.registerDataSetObserver(observer);
    }


    @Override
    public View getChildView(int groupPosition, int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if(groupPosition == 1){
        convertView = inflater.inflate(R.layout.distance_child_img, null);
        ViewGroup graphArea = (ViewGroup)convertView.findViewById(R.id.testw);
        SpeedGraphView SGV = new                                                    SpeedGraphView(getActivity().getBaseContext());
            SGV.setArrays(homefirstHalfSpeedArray,homesecondHalfSpeedArray,Global.app.match.homeTeam.getTeamName());
            SGV.setPlayerArrays(awayfirstHalfSpeedArray,awaysecondHalfSpeedArray,Global.app.match.awayTeam.getTeamName());
            SGV.setLayoutParams(new LayoutParams(1200, 400));
            graphArea.addView(SGV);

        }else{
            convertView = LayoutInflater.from(getActivity()).inflate(R.layout.distance_child_list, null);

             ListView listV = (ListView) convertView.findViewById(R.id.child_listView);
             ListAdapter adp = new ListAdapter(getActivity());
             adp.add(new ListItem("Deneme", "Away", 200, 100));
             adp.add(new ListItem("asdas", "Away", 200, 100));
             listV.setAdapter(adp);
            // listV.setLayoutParams(new LinearLayout.LayoutParams(1200,500));
        }
        return convertView;
    }


    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.distance_group, null);
        TextView tx = (TextView)convertView.findViewById(R.id.groupName);
        tx.setText(ExpListItems.get(groupPosition));
        return convertView;
    }
}