它仅显示子项中的一个父项,首先在所有其他父项上单击 expandableListview

it shows only one parents item in child which is clicked first on all other parent item for expandableListview

我的下面的代码只显示子项中的一个父项,首先单击所有其他父项 expandableListview

    public class AffiliationAdapter extends BaseExpandableListAdapter {
        Context context;
        LayoutInflater inflater;

        private List<String> _listDataHeader; // header titles
        // child data in format of header title, child title
        private ArrayList<HashMap<String, String>> _listDataChild;
        DbFields dbFields = new DbFields();


        public AffiliationAdapter(Context activity, List<String> listDataHeader, ArrayList<HashMap<String, String>> listDataChild) {

            this.context = activity;
            this._listDataHeader = listDataHeader;
            this._listDataChild = listDataChild;
        }


        @Override
        public void registerDataSetObserver(DataSetObserver dataSetObserver) {

        }

        @Override
        public void unregisterDataSetObserver(DataSetObserver dataSetObserver) {

        }

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

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

        @Override
        public Object getGroup(int groupPosition) {
            return this._listDataHeader.get(groupPosition);
        }

        @Override
        public Object getChild(int groupPosition, int childPosititon) {
            return this._listDataChild.get(groupPosition).get(childPosititon);
        }

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

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

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



        @Override
        public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {


            if (view == null) {
                LayoutInflater infalInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = infalInflater.inflate(R.layout.faq_group_expand, null);
            }

            TextView getFaqAnswer = (TextView) view.findViewById(R.id.answer);

            getFaqAnswer.setTypeface(null, Typeface.BOLD);
            getFaqAnswer.setText((_listDataHeader.get(i)));

            return view;
        }

        @Override
        public int getChildType(int groupPosition, int childPosition)
        {
            int result = 0;
            if (groupPosition == getGroupCount()-1)//logical fail ?
            {
                result = 1;
            }
            return result;

        }



        @Override
        public View getChildView(final int i, int i2, boolean b, View v, ViewGroup viewGroup) {

            if (v==null) {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = inflater.inflate(R.layout.child_affiliation, null);
                int itemType = getChildType(i, i2);


                LinearLayout layout_about = (LinearLayout) v.findViewById(R.id.layout_about);
                LinearLayout layout_vc = (LinearLayout) v.findViewById(R.id.layout_vc);
                LinearLayout layout_registrar = (LinearLayout) v.findViewById(R.id.layout_registrar);
                LinearLayout layout_examination_controller = (LinearLayout) v.findViewById(R.id.layout_examination_controller);
                LinearLayout layout_link = (LinearLayout) v.findViewById(R.id.layout_link);

                TextView about_detail = (TextView) v.findViewById(R.id.about_detail);
                TextView vc_name = (TextView) v.findViewById(R.id.vc_name);
                TextView vc_Contact = (TextView) v.findViewById(R.id.vc_Contact);
                TextView vc_email = (TextView) v.findViewById(R.id.vc_email);

                TextView registrar_name = (TextView) v.findViewById(R.id.registrar_name);
                TextView registarar_Contact = (TextView) v.findViewById(R.id.registarar_Contact);
                TextView registrar_email = (TextView) v.findViewById(R.id.registrar_email);


                TextView controller_name = (TextView) v.findViewById(R.id.controller_name);
                TextView controller_Contact = (TextView) v.findViewById(R.id.controller_Contact);
                TextView controller_email = (TextView) v.findViewById(R.id.controller_email);
                TextView link = (TextView) v.findViewById(R.id.link);

                about_detail.setText(_listDataChild.get(i2).get(dbFields.AFFILIATION_DESCRIPTION));
                vc_name.setText(_listDataChild.get(i2).get(dbFields.VC_NAME));
                vc_Contact.setText(_listDataChild.get(i2).get(dbFields.VC_PHONE));
                vc_email.setText(_listDataChild.get(i2).get(dbFields.VC_EMAIL));

                registrar_name.setText(_listDataChild.get(i2).get(dbFields.REGISTRAR_NAME));
                registarar_Contact.setText(_listDataChild.get(i2).get(dbFields.REGISTRAR_PHONE));
                registrar_email.setText(_listDataChild.get(i2).get(dbFields.REGISTRAR_EMAIL));

                controller_name.setText(_listDataChild.get(i2).get(dbFields.EXAM_CONTROLLER_NAME));
                controller_Contact.setText(_listDataChild.get(i2).get(dbFields.EXAM_CONTROLLER_PHONE));
                controller_email.setText(_listDataChild.get(i2).get(dbFields.EXAM_CONTROLLER_EMAIL));

                link.setText("Notice Link :" +_listDataChild.get(i2).get(dbFields.AFFILIATION_NOTICE_LINK)+
                        "\n Result Link : "+_listDataChild.get(i2).get(dbFields.AFFILIATION_RESULT_LINK)+
                        " \n Schedule Link :"+_listDataChild.get(i2).get(dbFields.AFFILIATION_SCHEDULE_LINK));




                int grup_pos = (int) getGroupId(i);
                switch (grup_pos) {
                    case 0:
                        layout_link.setVisibility(View.GONE);
                        layout_examination_controller.setVisibility(View.GONE);
                        layout_registrar.setVisibility(View.GONE);
                        layout_vc.setVisibility(View.GONE);
                        layout_about.setVisibility(View.VISIBLE);
                        //   v = inflater.inflate(R.layout.dialog_contact, null);
                        Toast.makeText(context.getApplicationContext(), "position is" + grup_pos, Toast.LENGTH_SHORT).show();
                        break;
                    case 1:
                        layout_link.setVisibility(View.GONE);
                        layout_examination_controller.setVisibility(View.GONE);
                        layout_registrar.setVisibility(View.GONE);
                        layout_vc.setVisibility(View.VISIBLE);
                        layout_about.setVisibility(View.GONE);
                        //   v = inflater.inflate(R.layout.item_faq_answer, null);
                        Toast.makeText(context.getApplicationContext(), "position is" + grup_pos, Toast.LENGTH_SHORT).show();
                        break;
                    case 2:
                        layout_link.setVisibility(View.GONE);
                        layout_examination_controller.setVisibility(View.GONE);
                        layout_registrar.setVisibility(View.VISIBLE);
                        layout_vc.setVisibility(View.GONE);
                        layout_about.setVisibility(View.GONE);
                        //     v = inflater.inflate(R.layout.dialog_contact, null);
                        Toast.makeText(context.getApplicationContext(), "position is" + grup_pos, Toast.LENGTH_SHORT).show();
                        break;
    //                case 3:
    //                    layout_link.setVisibility(View.GONE);
    //                    layout_examination_controller.setVisibility(View.GONE);
    //                    layout_registrar.setVisibility(View.GONE);
    //                    layout_vc.setVisibility(View.GONE);
    //                    layout_about.setVisibility(View.GONE);
    //               //     v = inflater.inflate(R.layout.events_items, null);
    //                    Toast.makeText(context.getApplicationContext(), "position is" + grup_pos, Toast.LENGTH_SHORT).show();
    //                    break;
                    case 3:
                        layout_link.setVisibility(View.GONE);
                        layout_examination_controller.setVisibility(View.VISIBLE);
                        layout_registrar.setVisibility(View.GONE);
                        layout_vc.setVisibility(View.GONE);
                        layout_about.setVisibility(View.GONE);
                        //     v = inflater.inflate(R.layout.dialog_program, null);
                        Toast.makeText(context.getApplicationContext(), "position is" + grup_pos, Toast.LENGTH_SHORT).show();
                        break;

                    case 4:
                        layout_link.setVisibility(View.VISIBLE);
                        layout_examination_controller.setVisibility(View.GONE);
                        layout_registrar.setVisibility(View.GONE);
                        layout_vc.setVisibility(View.GONE);
                        layout_about.setVisibility(View.GONE);
                        //    v = inflater.inflate(R.layout.dialog_program, null);
                        Toast.makeText(context.getApplicationContext(), "position is" + grup_pos, Toast.LENGTH_SHORT).show();
                        break;
                }
            }
            //     v.invalidate();
            return v;
        }


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

        @Override
        public boolean areAllItemsEnabled() {
            return false;
        }

        @Override
        public boolean isEmpty() {
            return false;
        }

        @Override
        public void onGroupExpanded(int i) {
            super.onGroupExpanded(i);


        }

        @Override
        public void onGroupCollapsed(int i) {
            super.onGroupCollapsed(i);
        }

        @Override
        public long getCombinedChildId(long l, long l2) {
            return 0;
        }

        @Override
        public long getCombinedGroupId(long l) {
            return 0;
        }
    }

这是我的主要activity 我的以下代码仅显示子项中的一个父项,首先在所有其他父项上单击 expandableListview 这是主要的 activity

public class AffiliationActivity extends AppCompatActivity {
ExpandableListView expandableListView;
int previousItem = -1;


//variables to holds course entities
// Getting data from


LayoutInflater layoutInflater;
DbHelper dbHelper;
DbFields dbFields;
private ArrayList<HashMap<String, String>> affiliationChildList;
List<String> faqListHeader;
ScrollView scrollView;
LinearLayout mainLayout,header;
CC_Application application;
Intent intent;
String collegeId;
TextView estdDate,setting,location,type,totAffiliation,totStudent,universityName,fax,phone,email,staff_num;


private ArrayList<String> parentItems = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_affiliation);

    //initialise all fields

    expandableListView = (ExpandableListView) findViewById(R.id.expandListViewFaq);
    layoutInflater = getLayoutInflater();
    dbFields = new DbFields();
    dbHelper = new DbHelper(this);
    scrollView = (ScrollView) findViewById(R.id.scroll);
    mainLayout = (LinearLayout) findViewById(R.id.mainLayout);
    header = (LinearLayout) findViewById(R.id.header);
    faqListHeader = new ArrayList<>();
    application= CC_Application.getInstance();

    estdDate = (TextView) findViewById(R.id.estd_date);
    setting = (TextView) findViewById(R.id.setting);
    location = (TextView) findViewById(R.id.location);
    type = (TextView) findViewById(R.id.type);
    totAffiliation = (TextView) findViewById(R.id.total_affiliation);
    totStudent = (TextView) findViewById(R.id.totStudent);
    universityName = (TextView) findViewById(R.id.titleC);
    fax = (TextView) findViewById(R.id.fax);
    phone = (TextView) findViewById(R.id.phone);
    email = (TextView) findViewById(R.id.email);
    staff_num = (TextView) findViewById(R.id.staff_num);

    intent = getIntent();
    if(intent!=null) {
        collegeId = intent.getStringExtra("getCollegeId").toString();
    }


    //set parent name for the child

    parentItems.add("About Us");
    parentItems.add("VC");
    parentItems.add("Registrar");
    parentItems.add("Examination Controller");
    parentItems.add("Links");

    //set actionbar customized logo

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeAsUpIndicator(getResources().getDrawable(R.drawable.college_connect_logo));

    affiliationChildList = application.getAllAffiliationList(collegeId);

    //hold data in expandable listview through adapter
    AffiliationAdapter adapter =  new AffiliationAdapter(this, parentItems, affiliationChildList);

    expandableListView.setAdapter(adapter);

    estdDate.setText(affiliationChildList.get(0).get(dbFields.AFFILIATION_FOUNDATION_YEAR));
    setting.setText(affiliationChildList.get(0).get(dbFields.AFFILIATION_SETTING));
    universityName.setText(affiliationChildList.get(0).get(dbFields.AFFILIATION_NAME));
    type.setText(affiliationChildList.get(0).get(dbFields.AFFILIATION_TYPE));
    totAffiliation.setText(affiliationChildList.get(0).get(dbFields.AFFILIATION_AFFILIATED_COLLEGE_NUMBER));
    totStudent.setText(affiliationChildList.get(0).get(dbFields.AFFILIATION_ENROLLED_STUDENTS));
    location.setText(affiliationChildList.get(0).get(dbFields.AFFILIATION_ADDRESS));
    fax.setText(affiliationChildList.get(0).get(dbFields.AFFILIATION_FAX));
    phone.setText(affiliationChildList.get(0).get(dbFields.AFFILIATION_PHONE));
    email.setText(affiliationChildList.get(0).get(dbFields.AFFILIATION_EMAIL));
    staff_num.setText(affiliationChildList.get(0).get(dbFields.AFFILIATION_ACADEMIC_STAFF_NUMBER));

    expandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
        @Override
        public void onGroupExpand(int groupPosition) {
            if (groupPosition != previousItem){
                expandableListView.collapseGroup(previousItem);
                previousItem = groupPosition;
                mainLayout.setVisibility(View.GONE);

            }
            else{
                expandableListView.collapseGroup(groupPosition);
                previousItem = -1;
                mainLayout.setVisibility(View.VISIBLE);

            }
        }
    });

    // Listview Group collasped listener
    expandableListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {

        @Override
        public void onGroupCollapse(int groupPosition) {
            mainLayout.setVisibility(View.VISIBLE);


            Toast.makeText(getApplicationContext(),"Group Collapsed",Toast.LENGTH_SHORT).show();

        }
    });

}



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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

}

包括主要activity。

我认为你必须通过适当的 child 尺寸而不是 1。一个小的变化:

发件人:

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

@Override
    public int getChildrenCount(int groupPosition) {
        return _listDataChild .size();
    }

编辑

当你得到 child 的时候。

发件人:

 @Override
    public Object getChild(int groupPosition, int childPosititon) {
        return this._listDataChild.get(groupPosition).get(childPosititon);
    }

收件人:

试一试(不确定):

 @Override
    public Object getChild(int groupPosition, int childPosititon) {
        return this._listDataChild.get(childPosititon);
    }

我想在你的 getChildView() 方法中,你已经在一个 if 条件下编写代码,即 if(v==null),只需在 if 中编写初始化代码并将数据分配给视图,在 if 条件之外编写该代码.

因为当你点击下一个 header(parent) 时不会膨胀新的视图,因为这次视图将不为空。