【问题标题】:ExpandableListView in Fragment片段中的 ExpandableListView
【发布时间】:2014-03-05 09:46:02
【问题描述】:

我正在尝试在 Fragments 中实现 ExpandableListView。我已经测试了所有设置为 toast 的值,它工作正常。但我的 ExpandableListView 不显示。我没有收到任何错误。我在下面粘贴了我的代码。

 package com.test.expandablelistView;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import com.example.tesfragement.R;
    import com.example.tesfragement.R.layout;
    import android.os.Bundle;
    import android.app.Fragment;
    import android.database.DataSetObserver;
    import android.support.v4.app.FragmentActivity;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ExpandableListAdapter;
    import android.widget.ExpandableListView;
    import android.widget.SimpleExpandableListAdapter;
    import android.widget.Toast;

    /**
     * A simple {@link android.support.v4.app.Fragment} subclass.
     * 
     */

    public class ExpandableListFragment extends Fragment {

        View v;
         ExpandableListAdapter mAdapter;
        List<String> _listDataHeader;
        HashMap<String, List<String>> _listDataChild;
        private Parent parent;
        private Child child;
        ExpandableListView lv;




        public ExpandableListFragment() {
            // Required empty public constructor

        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            v= inflater.inflate(R.layout.expandable_fragements,
                    container, false);


            return v;
        }


        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            // TODO Auto-generated method stub

            super.onActivityCreated(savedInstanceState);
            parent=new Parent();
            child=new Child();
             ExpandableListView lv = (ExpandableListView) v.findViewById(R.id.expandableListView1);

             //here setting all the values to Parent and child classes
             setDataValues();
             prepareListData();//here get the values and set this values to adoptor and set it visible


             mAdapter=new ExpandableListAdapter() {

                @Override
                public void unregisterDataSetObserver(DataSetObserver observer) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello", Toast.LENGTH_LONG).show();

                }

                @Override
                public void registerDataSetObserver(DataSetObserver observer) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello1", Toast.LENGTH_LONG).show();
                }

                @Override
                public void onGroupExpanded(int groupPosition) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello2", Toast.LENGTH_LONG).show();
                }

                @Override
                public void onGroupCollapsed(int groupPosition) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello3", Toast.LENGTH_LONG).show();
                }

                @Override
                public boolean isEmpty() {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello4", Toast.LENGTH_LONG).show();
                    return false;
                }

                @Override
                public boolean isChildSelectable(int groupPosition, int childPosition) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello5", Toast.LENGTH_LONG).show();
                    return false;
                }

                @Override
                public boolean hasStableIds() {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello6", Toast.LENGTH_LONG).show();
                    return false;
                }

                @Override
                public View getGroupView(int groupPosition, boolean isExpanded,
                        View convertView, ViewGroup parent) {
                    Toast.makeText(getActivity(),"hello7", Toast.LENGTH_LONG).show();
                    // TODO Auto-generated method stub
                    return v;
                }

                @Override
                public long getGroupId(int groupPosition) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello8", Toast.LENGTH_LONG).show();
                    return 0;
                }

                @Override
                public int getGroupCount() {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello9", Toast.LENGTH_LONG).show();
                    return 0;
                }

                @Override
                public Object getGroup(int groupPosition) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello10", Toast.LENGTH_LONG).show();
                    return null;
                }

                @Override
                public long getCombinedGroupId(long groupId) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello11", Toast.LENGTH_LONG).show();
                    return 0;
                }

                @Override
                public long getCombinedChildId(long groupId, long childId) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello12", Toast.LENGTH_LONG).show();
                    return 0;
                }

                @Override
                public int getChildrenCount(int groupPosition) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello13", Toast.LENGTH_LONG).show();
                    return 0;
                }

                @Override
                public View getChildView(int groupPosition, int childPosition,
                        boolean isLastChild, View convertView, ViewGroup parent) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello14", Toast.LENGTH_LONG).show();
                    return v;
                }

                @Override
                public long getChildId(int groupPosition, int childPosition) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello15", Toast.LENGTH_LONG).show();
                    return 0;
                }

                @Override
                public Object getChild(int groupPosition, int childPosition) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello16", Toast.LENGTH_LONG).show();
                    return null;
                }

                @Override
                public boolean areAllItemsEnabled() {
                    // TODO Auto-generated method stub
                    Toast.makeText(getActivity(),"hello17", Toast.LENGTH_LONG).show();
                    return false;
                }
            };

               // mAdapter = new ExpandableListAdapter(this, _listDataHeader, _listDataChild);

                // setting list adapter
                lv.setAdapter(mAdapter);



        }


        public void prepareListData()
        {
            // testing purpose
            _listDataHeader = new ArrayList<String>();
            _listDataChild = new HashMap<String, List<String>>();


            // declare the references
            //add the parent values to List
            _listDataHeader.add(parent.getCardName());
            _listDataHeader.add(String.valueOf(parent.getMinimum_salary()));
            _listDataHeader.add(String.valueOf(parent.getInterest_rate()));


            //set Child views to parent
            List<String> cardDetails=new ArrayList<String>();
            cardDetails.add("");

            List<String> mininum_sal_details=new ArrayList<String>();
            mininum_sal_details.add(child.GetMinimumSalDetails());

            List<String> interest_details=new ArrayList<String>();
            interest_details.add(child.get_interest_rate_details());

            //set to adoptor

            _listDataChild.put(_listDataHeader.get(0),  cardDetails);
            _listDataChild.put(_listDataHeader.get(1),mininum_sal_details);

            //

             for(int i = 0; i < _listDataHeader.size(); i++) //cars name of arraylist
                {
                   String value=_listDataHeader.get(i);  
                   Toast toast = Toast.makeText(getActivity(),value, Toast.LENGTH_LONG);
                   toast.setGravity(Gravity.CENTER, 0, 0);
                   toast.show();

                }



        }

        public void setDataValues()
        {
            //set Parent values
            parent.setCardName("Platinum credit Card");
            parent.setMinimum_salary(15000.00);
            parent.setInterest_Rate(1.2);

            //set Child values
            child.set_card_details("You require minimum salary of 1500 per month");
            child.set_interest_rate_details("interest rate is 2.0%");


        }
    }

【问题讨论】:

    标签: android android-fragments expandablelistview


    【解决方案1】:

    请检查此代码。

    package com.test.expandablelistView;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import com.example.tesfragement.R;
    import com.example.tesfragement.R.layout;
    import android.os.Bundle;
    import android.app.Fragment;
    import android.content.Context;
    import android.database.DataSetObserver;
    import android.graphics.Typeface;
    import android.support.v4.app.FragmentActivity;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseExpandableListAdapter;
    import android.widget.ExpandableListAdapter;
    import android.widget.ExpandableListView;
    import android.widget.SimpleExpandableListAdapter;
    import android.widget.TextView;
    import android.widget.Toast;
    
    /**
     * A simple {@link android.support.v4.app.Fragment} subclass.
     * 
     */
    
    public class ExpandableListFragment extends Fragment {
    
        View v;
         ExpandableListAdapter mAdapter;
        List<String> _listDataHeader;
        HashMap<String, List<String>> _listDataChild;
        private Parent parent;
        private Child child;
        ExpandableListView lv;
        Context con;
        public ExpandableListFragment() {
            // Required empty public constructor
    
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            v= inflater.inflate(R.layout.expandable_fragements,
                    container, false);
    
            return v;
        }
    
    
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
    
            super.onActivityCreated(savedInstanceState);
            parent=new Parent();
            child=new Child();
             ExpandableListView lv = (ExpandableListView) v.findViewById(R.id.expandableListView1);
    
             //here setting all the values to Parent and child classes
             setDataValues();
             prepareListData();//here get the values and set this values to adoptor and set it visible
             con=getActivity();
    
             mAdapter=new ExpandabelListAdoptor(con,_listDataHeader, _listDataChild) ; //here i didnt set list values to this adoptor
    
               // mAdapter = new ExpandableListAdapter(this, _listDataHeader, _listDataChild);
    
                // setting list adapter
                lv.setAdapter(mAdapter);
    
        }
    
        public void prepareListData()
        {
            // testing purpose
            _listDataHeader = new ArrayList<String>();
            _listDataChild = new HashMap<String, List<String>>();
    
    
            // declare the references
            //add the parent values to List
            _listDataHeader.add(parent.getCardName());
            _listDataHeader.add(String.valueOf(parent.getMinimum_salary()));
            _listDataHeader.add(String.valueOf(parent.getInterest_rate()));
    
    
            //set Child views to parent
            List<String> cardDetails=new ArrayList<String>();
            cardDetails.add("");
    
            List<String> mininum_sal_details=new ArrayList<String>();
            mininum_sal_details.add(child.GetMinimumSalDetails());
    
            List<String> interest_details=new ArrayList<String>();
            interest_details.add(child.get_interest_rate_details());
    
            //set to adoptor
    
            _listDataChild.put(_listDataHeader.get(0),  cardDetails);
            _listDataChild.put(_listDataHeader.get(1),mininum_sal_details);
    
            //
    
             for(int i = 0; i < _listDataHeader.size(); i++) //cars name of arraylist
                {
                   String value=_listDataHeader.get(i);  
                   Toast toast = Toast.makeText(getActivity(),value, Toast.LENGTH_LONG);
                   toast.setGravity(Gravity.CENTER, 0, 0);
                   toast.show();
    
                }
        }
    
        public void setDataValues()
        {
            //set Parent values
            parent.setCardName("Platinum credit Card");
            parent.setMinimum_salary(15000.00);
            parent.setInterest_Rate(1.2);
    
            //set Child values
            child.set_card_details("You require minimum salary of 1500 per month");
            child.set_interest_rate_details("interest rate is 2.0%");
        }
    
    }
    class ExpandabelListAdoptor extends BaseExpandableListAdapter
    {
    
        private Context _context;
        private List<String> _listDataHeader;
        private HashMap<String, List<String>> _listDataChild;
    
        ExpandabelListAdoptor(Context con,List<String> listDataHeader ,HashMap<String, List<String>>  listDataChild )
        {
            this._context=con;
    
            this._listDataChild=listDataChild;
            this._listDataHeader=listDataHeader;
        }
    
        @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) {
            // TODO Auto-generated method stub
             return childPosition;
        }
    
        @Override
        public View getChildView(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);
            return convertView;
    
        }
    
        @Override
        public int getChildrenCount(int groupPosition) {
            return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                    .size();
        }
    
        @Override
        public Object getGroup(int groupPosition) {
            // TODO Auto-generated method stub
             return this._listDataHeader.get(groupPosition);
        }
    
        @Override
        public int getGroupCount() {
            // TODO Auto-generated method stub
            return this._listDataHeader.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) {
    
                String headerTitle = (String) getGroup(groupPosition);
                if (convertView == null) {
                    LayoutInflater infalInflater = (LayoutInflater) this._context
                            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    convertView = infalInflater.inflate(R.layout.list_group, null);
                }
    
                TextView lblListHeader = (TextView) convertView
                        .findViewById(R.id.lblListHeader);
                lblListHeader.setTypeface(null, Typeface.BOLD);
                lblListHeader.setText(headerTitle);
    
                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 true;
        }
    
    }
    

    【讨论】:

    • 请解释您在代码中所做的更改。 @VenushkaT
    • @GrIsHu 我已经发布了所有我认为对他有帮助的代码。
    • 但其他用户无法理解。说明您为解决 OP 问题所做的必要更改。 @VenushkaT
    • @GrIsHu 是的,我同意你下次。我会做的。谢谢。它对我真的很有帮助。 :)
    【解决方案2】:

    如果getGroupCount 返回 0,屏幕上不会显示任何内容,因为不会调用 getGroupView 方法。孩子们也一样

    【讨论】:

    • 只是一个问题,我正在尝试使用此代码在片段中实现ExpandableListViewParentChild 类中有什么?列表中填充的是实际数据吗?
    • 完全正确。我的回答可能不够清楚。我的意思是数据集,因此您要显示的数据必须大于 0。@mlaferla
    猜你喜欢
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多