ExpandableListView始终展开不收缩

效果图:




此界面是用expandablelistview实现的

直接上代码:

package com.example.administrator.expandlistviewdemo;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ExpandableListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
/**
 * Created by dawn on 2017/11/20.
 */
public class MainActivity extends AppCompatActivity {
    private ExpandableListView expandableListView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_main);
        expandableListView=findViewById(R.id.expandlistview);
        String[] keyArr={"A","B"};
        Map<String, ArrayList<ContactsInfo>> map=new TreeMap<>();
        ArrayList<ContactsInfo> slist=new ArrayList<>();
        slist.add(new ContactsInfo("系统"));
        slist.add(new ContactsInfo("系统1"));
        map.put("A",slist);
        ArrayList<ContactsInfo> slist1=new ArrayList<>();
        slist1.add(new ContactsInfo("蒲公英"));
        slist1.add(new ContactsInfo("苍耳种子"));
        map.put("B",slist1);
        ContactsInfoAdapter adapter=new ContactsInfoAdapter(keyArr,map,this);
        expandableListView.setAdapter(adapter);
        for (int i = 0; i < keyArr.length; i++) {
            expandableListView.expandGroup(i);
        }
        expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
            @Override
            public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
                return true;
            }
        });
        adapter.setConnectListtener(new ContactsInfoAdapter.ConnectListtener() {
            @Override
            public void getSelectConnect(ContactsInfo m) {
                Toast.makeText(MainActivity.this,m.getName(),Toast.LENGTH_SHORT).show();
            }
        });

    }


}

ContactsInfoAdapter的代码:
package com.example.administrator.expandlistviewdemo;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.RelativeLayout;
import android.widget.TextView;


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

/**
 * Created by dawn on 2017/11/20.
 */

public class ContactsInfoAdapter extends BaseExpandableListAdapter {

    private String[] keyArr;
    private Map<String, ArrayList<ContactsInfo>> map;
    private Context mContex;
    private ConnectListtener mlisttener;

    public void setConnectListtener(ConnectListtener mlisttener) {
        this.mlisttener = mlisttener;
    }

    public ContactsInfoAdapter(String[] keyArr, Map<String, ArrayList<ContactsInfo>> map, Context mContext) {
        this.keyArr = keyArr;
        this.map = map;
        this.mContex = mContext;
    }

    //  获得某个父项的某个子项
    @Override
    public ContactsInfo getChild(int parentPos, int childPos) {
        return map.get(keyArr[parentPos]).get(childPos);
    }

    //  获得父项的数量
    @Override
    public int getGroupCount() {
        return keyArr.length;
    }

    //  获得某个父项的子项数目
    @Override
    public int getChildrenCount(int parentPos) {
        return map.get(keyArr[parentPos]).size();

    }

    //  获得某个父项
    @Override
    public String getGroup(int parentPos) {
        return keyArr[parentPos];
    }

    //  获得某个父项的id
    @Override
    public long getGroupId(int parentPos) {
        return parentPos;
    }

    //  获得某个父项的某个子项的id
    @Override
    public long getChildId(int parentPos, int childPos) {
        return childPos;
    }

    //  按函数的名字来理解应该是是否具有稳定的id,这个方法目前一直都是返回false,没有去改动过
    @Override
    public boolean hasStableIds() {
        return false;
    }

    //  获得父项显示的view
    @Override
    public View getGroupView(int parentPos, boolean b, View view, ViewGroup viewGroup) {
        if (view == null) {
            view = LayoutInflater.from(mContex).inflate(R.layout.item_character, null);
        }
        TextView text = (TextView) view.findViewById(R.id.character);
        text.setText(keyArr[parentPos]);
        return view;
    }

    //  获得子项显示的view
    @Override
    public View getChildView(int parentPos, int childPos, boolean b, View view, ViewGroup viewGroup) {
        if (view == null) {
            view = LayoutInflater.from(mContex).inflate(R.layout.item_contact, null);
        }
        RelativeLayout mLinearLayout = (RelativeLayout) view.findViewById(R.id.contact_lin);
        TextView mTextView = (TextView) view.findViewById(R.id.contact_name);
        final ContactsInfo mInfo = map.get(keyArr[parentPos]).get(childPos);
        mTextView.setText(mInfo.getName());
        mLinearLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mlisttener != null) {
                    mlisttener.getSelectConnect(mInfo);
                }
            }
       });
        return view;
    }

    //  子项是否可选中,如果需要设置子项的点击事件,需要返回true
    @Override
    public boolean isChildSelectable(int i, int i1) {
        return false;
    }

    public interface ConnectListtener {
        void getSelectConnect(ContactsInfo m);
    }

}


接下来是布局文件

item_contact.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        android:id="@+id/contact_lin"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
       >
        <TextView
            android:id="@+id/contact_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </RelativeLayout>

item_character.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    >

     <TextView
         android:id="@+id/character"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"


         />

</android.support.constraint.ConstraintLayout>
MainActivity.class对应的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <ExpandableListView
        android:id="@+id/expandlistview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:groupIndicator="@color/colorPrimary"
        ></ExpandableListView>
      <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tv_total"
        android:text="1223"
        />

</LinearLayout>


猜你喜欢

转载自blog.csdn.net/qiaojianfang_1148/article/details/78590417