安卓listView实现多级列表
生活随笔
收集整理的這篇文章主要介紹了
安卓listView实现多级列表
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
安卓listView實現(xiàn)多級列表
實現(xiàn)兩級列表我們可以使用ExpandableListView,但對于實現(xiàn)多級列表,使用ExpandableListView嵌套實現(xiàn)起來就比較費勁,可以使用listView的顯示隱藏來實現(xiàn)
先上效果圖
1.xml文件
2.主activity
package com.example.ceshiapplication.ui;import android.os.Bundle; import android.view.LayoutInflater; import android.widget.ListView;import com.example.ceshiapplication.R; import com.example.ceshiapplication.adapter.LieBiaoAdapter; import com.example.ceshiapplication.bean.DataInfo; import com.example.ceshiapplication.utlis.LieBiaoItemClickListener;import java.util.ArrayList; import java.util.List;import androidx.appcompat.app.AppCompatActivity;public class LieBiaoActivity extends AppCompatActivity {private ListView listView;private List<DataInfo> mData = new ArrayList<>();private List<DataInfo> mDataChild = new ArrayList<>();private LieBiaoAdapter lieBiaoAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_lie_biao);initView();}private void initView() {listView = (ListView) findViewById(R.id.listView);LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);initData();lieBiaoAdapter = new LieBiaoAdapter(inflater, mData, mDataChild);listView.setAdapter(lieBiaoAdapter);LieBiaoItemClickListener lieBiaoItemClickListener = new LieBiaoItemClickListener(lieBiaoAdapter);listView.setOnItemClickListener(lieBiaoItemClickListener);}private void initData() {//添加節(jié)點 -- 節(jié)點名稱,節(jié)點level,節(jié)點id,父節(jié)點id,是否有子節(jié)點,是否展開//最外層列表DataInfo data1 = new DataInfo("北京市", DataInfo.TOP_LEVEL, 0, DataInfo.NO_PARENT, true, false);//第二層列表DataInfo data2 = new DataInfo("朝陽區(qū)", DataInfo.TOP_LEVEL + 1, 1, data1.getId(), true, false);//第三層列表DataInfo data7 = new DataInfo("來廣營", DataInfo.TOP_LEVEL + 2, 2, data2.getId(), false, false);//第三層列表DataInfo data3 = new DataInfo("小紅門鎮(zhèn)", DataInfo.TOP_LEVEL + 2, 3, data2.getId(), true, false);//第四層列表DataInfo data4 = new DataInfo("鴻博家園", DataInfo.TOP_LEVEL + 3, 4, data3.getId(), false, false);//第二層列表DataInfo data5 = new DataInfo("昌平區(qū)", DataInfo.TOP_LEVEL + 1, 5, data1.getId(), true, false);//第三層列表DataInfo data6 = new DataInfo("天通北苑", DataInfo.TOP_LEVEL + 2, 6, data5.getId(), true, false);//第四層列表DataInfo data8 = new DataInfo("北七家鎮(zhèn)", DataInfo.TOP_LEVEL + 3, 7, data6.getId(), false, false);//最外層列表DataInfo data9 = new DataInfo("山西省", DataInfo.TOP_LEVEL, 8, DataInfo.NO_PARENT, true, false);//第二層列表DataInfo data10 = new DataInfo("運城市", DataInfo.TOP_LEVEL + 1, 9, data9.getId(), true, false);//第三層列表DataInfo data16 = new DataInfo("鹽湖區(qū)", DataInfo.TOP_LEVEL + 2, 10, data10.getId(), false, false);//第三層列表DataInfo data11 = new DataInfo("臨猗縣", DataInfo.TOP_LEVEL + 2, 11, data10.getId(), true, false);//第四層列表DataInfo data12 = new DataInfo("某某鎮(zhèn)", DataInfo.TOP_LEVEL + 3, 12, data11.getId(), true, false);//第五層列表DataInfo data13 = new DataInfo("某某村", DataInfo.TOP_LEVEL + 4, 13, data12.getId(), false, false);//添加節(jié)點 -- 節(jié)點名稱,節(jié)點level,節(jié)點id,父節(jié)點id,是否有子節(jié)點,是否展開//第三層列表DataInfo data14 = new DataInfo("外榮縣", DataInfo.TOP_LEVEL + 2, 14, data10.getId(), true, false);//第四層列表DataInfo data15 = new DataInfo("某某區(qū)", DataInfo.TOP_LEVEL + 3, 15, data14.getId(), false, false);mData.add(data1);mData.add(data9);mDataChild.add(data2);mDataChild.add(data3);mDataChild.add(data4);mDataChild.add(data5);mDataChild.add(data6);mDataChild.add(data7);mDataChild.add(data8);mDataChild.add(data10);mDataChild.add(data11);mDataChild.add(data12);mDataChild.add(data13);mDataChild.add(data14);mDataChild.add(data15);mDataChild.add(data16);} }3.適配器
package com.example.ceshiapplication.adapter;import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView;import com.example.ceshiapplication.R; import com.example.ceshiapplication.bean.DataInfo;import java.util.List;public class LieBiaoAdapter extends BaseAdapter {private LayoutInflater layoutInflater;private List<DataInfo> mData;private List<DataInfo> mDataChild;private int indentionBase;//首行縮進的距離public LieBiaoAdapter(LayoutInflater layoutInflater, List<DataInfo> mData, List<DataInfo> mDataChild) {this.layoutInflater = layoutInflater;this.mData = mData;this.mDataChild = mDataChild;indentionBase = 50;}public List<DataInfo> getmData() {return mData;}public List<DataInfo> getmDataChild() {return mDataChild;}@Overridepublic int getCount() {return mData.size();}@Overridepublic Object getItem(int position) {return mData.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder =null;if (convertView == null) {holder = new ViewHolder();convertView = layoutInflater.inflate(R.layout.treeview_item, null);holder.disclosureImg = convertView.findViewById(R.id.disclosureImg);holder.contentText = convertView.findViewById(R.id.contentText);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}DataInfo dataInfo = mData.get(position);int level = dataInfo.getLevel();holder.contentText.setText(dataInfo.getContext());holder.disclosureImg.setPadding(indentionBase * (level + 1),indentionBase,indentionBase,indentionBase);if (dataInfo.isHasChildren() &&dataInfo.isExpanded()){holder.disclosureImg.setImageResource(R.drawable.ic_down);holder.disclosureImg.setVisibility(View.VISIBLE);}else if (dataInfo.isHasChildren() &&!dataInfo.isExpanded()){holder.disclosureImg.setImageResource(R.drawable.ic_right_icon);holder.disclosureImg.setVisibility(View.VISIBLE);}else if (!dataInfo.isHasChildren()){holder.disclosureImg.setVisibility(View.INVISIBLE);}return convertView;}public staticclass ViewHolder {public ImageView disclosureImg;public TextView contentText;} }4.實體bean
package com.example.ceshiapplication.bean;public class DataInfo {private String context;private int level;private int id;private int parentId;private boolean hasChildren;//是否包含子元素private boolean isExpanded;//是否展開/** 表示該節(jié)點沒有父元素,也就是level為0的節(jié)點 */public static final int NO_PARENT =-1;/** 表示該元素位于最頂層的層級 */public static final int TOP_LEVEL = 0;public DataInfo(String context, int level, int id, int parentId, boolean hasChildren, boolean isExpanded) {this.context = context;this.level = level;this.id = id;this.parentId = parentId;this.hasChildren = hasChildren;this.isExpanded = isExpanded;}public String getContext() {return context;}public void setContext(String context) {this.context = context;}public int getLevel() {return level;}public void setLevel(int level) {this.level = level;}public int getId() {return id;}public void setId(int id) {this.id = id;}public int getParentId() {return parentId;}public void setParentId(int parentId) {this.parentId = parentId;}public boolean isHasChildren() {return hasChildren;}public void setHasChildren(boolean hasChildren) {this.hasChildren = hasChildren;}public boolean isExpanded() {return isExpanded;}public void setExpanded(boolean expanded) {isExpanded = expanded;} }5.子布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/disclosureImg"android:layout_width="wrap_content"android:layout_height="60dp"android:layout_centerVertical="true"android:layout_alignParentLeft="true"/><TextViewandroid:id="@+id/contentText"android:layout_width="wrap_content"android:layout_height="60dp"android:layout_centerVertical="true"android:layout_toRightOf="@id/disclosureImg"android:gravity="center"/></RelativeLayout>總結(jié)
以上是生活随笔為你收集整理的安卓listView实现多级列表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python类中包含一个特殊的变量、它可
- 下一篇: IntelliJ IDEA安装与JDK