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>