ExpandableListView始终展开不收缩

来源:互联网 发布:客户达软件下载 编辑:程序博客网 时间:2024/05/22 06:33

效果图:




此界面是用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>


阅读全文
0 0
原创粉丝点击