Android在Fragment中ExpandableView不能展开

求助各位大神,我在Fragment中设置了一个ExpandableView,但是不能展开,Log日志发现getChildView方法没有执行
查询资料说是因为Button,但我的布局里没有Button。
而且发现这个代码在Activity中就正常,Fragment中就不正常
这是单独拿出来做最简单的测试的东西,Activity中只有一个fragment
Activity的布局

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.dachuang.androidtest.MainActivity">

   <fragment
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       class="com.dachuang.androidtest.MainIndexFragment"/>
</RelativeLayout>

Fragment的两个布局,group

 <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:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/colorPrimary"
        android:id="@+id/canteen_food_list_group_window_name"/>


</LinearLayout>

child的布局

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

    <ImageView
        android:layout_marginTop="3dp"
        android:layout_marginBottom="3dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/canteen_food_list_child_food_cover"
        />

    <LinearLayout
        android:layout_marginTop="3dp"
        android:layout_marginBottom="3dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/canteen_food_list_child_food_name"/>

        <RatingBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="?android:attr/ratingBarStyleSmall"
            android:id="@+id/canteen_food_list_child_food_rating"/>

    </LinearLayout>


</LinearLayout>

这是Fragment的代码


public class MainIndexFragment extends Fragment {

    View view;
    ExpandableListView canteenList = null;
    CanteenFoodListAdapter canteenFoodListAdapter = null;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.main_index, container, false);
        canteenList = (ExpandableListView) view.findViewById(R.id.canteen_food_list);
        canteenFoodListAdapter = new CanteenFoodListAdapter(getActivity());
        canteenList.setAdapter(canteenFoodListAdapter);
        return view;
    }
}

Fragment的Adapter

 package com.dachuang.adapter;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;

import com.dachuang.campusfood.R;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;


/**
 * Created by Unicorn on 2017/2/14.
 */

public class CanteenFoodListAdapter extends BaseExpandableListAdapter {

    private List<String> groupList = new ArrayList<>();
    private List<Map<String,Object>> childMapList = new ArrayList<>();
    private int windowFoodSize[] = {1,2};     //存放每个窗口有多少种饭菜
    private LayoutInflater mInflater;
    private Context paramContext;

    public CanteenFoodListAdapter(Context paramContext, List<String> group,
                                  List<Map<String, Object>> childMap,int[] windowSize){
        this.paramContext = paramContext;
        this.mInflater = LayoutInflater.from(paramContext);
        //
    }

    //测试用构造方法
    public CanteenFoodListAdapter(Context paramContext){
        this.paramContext = paramContext;
        this.mInflater = LayoutInflater.from(paramContext);
    }
    @Override
    public int getGroupCount() {
        return 2;
       // return groupList.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return windowFoodSize[groupPosition];
    }

    @Override
    public Object getGroup(int groupPosition) {
        return null;
    }

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

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

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

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

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View groupView, ViewGroup parent) {
        Log.e("groupView","groupView");
        GroupHolder groupHolder = null;
        if(groupView == null){
            groupView = mInflater.inflate(R.layout.canteen_food_list_group,null);
            groupHolder = new GroupHolder();
            groupHolder.windowName = (TextView) groupView.findViewById(R.id.canteen_food_list_group_window_name);
            groupView.setTag(groupHolder);
            //给view对象一个标签,告诉计算机我们已经在缓冲区里放了一个view,下回直接来拿就行了
        }
        else{
            groupHolder = (GroupHolder) groupView.getTag();
        }
        groupHolder.windowName.setText("民族风味");
        return groupView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View childView, ViewGroup parent) {
        Log.e("childView","childView");
        ChildHolder childHolder = null;
        if(childView == null){
            childView = mInflater.inflate(R.layout.canteen_food_list_child,null);
            childHolder = new ChildHolder();
            childHolder.foodCover = (ImageView) childView.findViewById(R.id.canteen_food_list_child_food_cover);
            childHolder.foodName = (TextView) childView.findViewById(R.id.canteen_food_list_child_food_name);
            childHolder.foodRating = (RatingBar) childView.findViewById(R.id.canteen_food_list_child_food_rating);
            childView.setTag(childHolder);
        }
        else{
            childHolder = (ChildHolder) childView.getTag();
        }
        childHolder.foodCover.setImageResource(R.drawable.girl_icon_default);
        childHolder.foodName.setText("清蒸");
        childHolder.foodRating.setNumStars(3);
        return childView;
    }

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

    class GroupHolder {
        public TextView windowName;
    }

    class ChildHolder {
        public ImageView foodCover;
        public TextView foodName;
        public RatingBar foodRating;
    }

}

请问有谁知道吗?Activity中就可以正常展开,Fragment中就不可以。查了半天也没看出来什么结果。有知道的大神请指点迷津,谢谢大家

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问