Android(安卓)ListView(加载不同布局)嵌套GridView(加载不同布局)
16lz
2021-01-26
Android菜鸟,仅实现了想要的效果,如有其它方案,欢迎分享,感谢
其中:listView分为红色框内的两种子布局(开始和未开始状态);绿色框为GridView,分为枚红色框中的几种状态
2.png
代码:
page1_demo.xml
<?xml version="1.0" encoding="utf-8"?>
page1Activity.java
import android.os.Bundle;import android.util.Log;import android.widget.ListView;import com.ab.activity.AbActivity;import com.ab.view.titlebar.AbTitleBar;import com.andbase.R;import com.andbase.global.MyApplication;import com.andbase.patrol.gtDemo.adapter.pagesAdapter.Page1ListViewAdapter;import com.andbase.patrol.gtDemo.model.Page1FormDemo;import java.util.ArrayList;import java.util.List;/** * Created by lmx on 2018/1/30. */public class Page1Activity extends AbActivity { private MyApplication application; //ListView加载不同布局 private ListView listview; public List listInfo = null; private Page1Activity context; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setAbContentView(R.layout.page1_demo); AbTitleBar mAbTitleBar = this.getTitleBar(); mAbTitleBar.setTitleText("page1"); mAbTitleBar.setLogo(R.drawable.button_selector_back); mAbTitleBar.setTitleBarBackground(R.drawable.top_bg); mAbTitleBar.setTitleTextMargin(10, 0, 0, 0); mAbTitleBar.setLogoLine(R.drawable.line); this.setTitleBarOverlay(true); //加载不同布局 this.listview = (ListView) findViewById(R.id.listTask); context = this; application = (MyApplication)abApplication; //加载 loadListView(); } /** * 加载listView数据 */ public void loadListView(){ try { listInfo = new ArrayList(); Page1FormDemo form1 = new Page1FormDemo(); form1.setPropertyType(0);//数值 form1.setTaskName("任务名称一"); form1.setTaskTime("2018-02-10 09:00~12:00"); form1.setTaskState("状态"); listInfo.add(form1); Page1FormDemo form2 = new Page1FormDemo(); form2.setPropertyType(1); form2.setTaskName("任务名称二"); form2.setTaskTime("2018-02-10 09:00~12:00"); form2.setTaskState("状态"); listInfo.add(form2); }catch(Exception ex) { Log.e("JSON Error: ", ex.toString()); } ListView listView = (ListView) findViewById(R.id.listTask); Page1ListViewAdapter page1ListViewAdapter = new Page1ListViewAdapter(context,listInfo); listView.setAdapter(page1ListViewAdapter); }}
Page1ListViewAdapter.java
import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.GridView;import android.widget.TextView;import com.andbase.R;import com.andbase.patrol.gtDemo.activity.pages.Page1Activity;import com.andbase.patrol.gtDemo.model.Page1FormDemo;import com.andbase.patrol.gtDemo.model.PointStateDemo;import java.util.ArrayList;import java.util.List;/** * Created by lmx on 2018/2/26. */public class Page1ListViewAdapter extends BaseAdapter { private Page1Activity mContext; private List lists; private LayoutInflater layinf; //GridView加载不同布局 public List listPoint = null; public Page1ListViewAdapter(Page1Activity context, List lists){ this.mContext = context; this.lists = lists; layinf = LayoutInflater.from(context); } @Override public int getCount() { return lists.size(); } @Override public int getItemViewType(int position) { //根据position返回指定的布局类型,比如0、1,根据这个返回值加载不同布局 return lists.get(position).getPropertyType(); } @Override public int getViewTypeCount() { //这里是adapter里有几种布局 return 2; } @Override public Object getItem(int position) { return lists.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent){ Page1FormDemo form = lists.get(position); //第1个布局:进行中 ViewDoingHolder doingHolder = null; //第2个布局:已完成 ViewDoneHolder doneHolder = null; if (form == null) { return null; } if (convertView == null) { switch (form.getPropertyType()){ case 0: convertView = layinf.inflate(R.layout.page1_item1_demo, parent, false); //使用减少findView的次数 doingHolder = new Page1ListViewAdapter.ViewDoingHolder(); doingHolder.taskName = (TextView) convertView.findViewById(R.id.taskNameDoing); doingHolder.taskTime = (TextView) convertView.findViewById(R.id.taskTimeDoing); doingHolder.taskState = (TextView) convertView.findViewById(R.id.taskStateDoing); doingHolder.GridList = (GridView) convertView.findViewById(R.id.GridListDoing); doingHolder.okBtn = (Button) convertView.findViewById(R.id.okBtn); doingHolder.noBtn = (Button) convertView.findViewById(R.id.noBtn); //设置标记 convertView.setTag(doingHolder); break; case 1: convertView = layinf.inflate(R.layout.page1_item2_demo, parent, false); //使用减少findView的次数 doneHolder = new Page1ListViewAdapter.ViewDoneHolder(); doneHolder.taskName = (TextView) convertView.findViewById(R.id.taskNameDone); doneHolder.taskTime = (TextView) convertView.findViewById(R.id.taskTimeDone); doneHolder.taskState = (TextView) convertView.findViewById(R.id.taskStateDone); doneHolder.GridList = (GridView) convertView.findViewById(R.id.GridListDone); doneHolder.okBtn = (Button) convertView.findViewById(R.id.okBtn); doneHolder.noBtn = (Button) convertView.findViewById(R.id.noBtn); //设置标记 convertView.setTag(doneHolder); break; } } else { switch (form.getPropertyType()){ case 0: doingHolder = (Page1ListViewAdapter.ViewDoingHolder) convertView.getTag(); break; case 1: doneHolder = (Page1ListViewAdapter.ViewDoneHolder) convertView.getTag(); break; } } /** * 根据不同布局加载不同数据 * */ switch (form.getPropertyType()){ case 0: doingHolder.taskName.setText(form.getTaskName()); doingHolder.taskTime.setText(form.getTaskTime()); doingHolder.taskState.setText(form.getTaskState()); //GridView listPoint = new ArrayList(); try { PointStateDemo form1 = new PointStateDemo(); form1.setPatrolStatusType(0); form1.setPatrolStatus("0"); form1.setPointName("1"); listPoint.add(form1); PointStateDemo form2 = new PointStateDemo(); form2.setPatrolStatusType(0); form2.setPatrolStatus("0"); form2.setPointName("2"); listPoint.add(form2); PointStateDemo form3 = new PointStateDemo(); form3.setPatrolStatusType(0); form3.setPatrolStatus("0"); form3.setPointName("3"); listPoint.add(form3); PointStateDemo form4 = new PointStateDemo(); form4.setPatrolStatusType(0); form4.setPatrolStatus("0"); form4.setPointName("4"); listPoint.add(form4); PointStateDemo form5 = new PointStateDemo(); form5.setPatrolStatusType(0); form5.setPatrolStatus("0"); form5.setPointName("5"); listPoint.add(form5); PointStateDemo form6 = new PointStateDemo(); form6.setPatrolStatusType(1); form6.setPatrolStatus("1"); form6.setPointName("6"); listPoint.add(form6); PointStateDemo form7 = new PointStateDemo(); form7.setPatrolStatusType(1); form7.setPatrolStatus("1"); form7.setPointName("7"); listPoint.add(form7); PointStateDemo form8 = new PointStateDemo(); form8.setPatrolStatusType(1); form8.setPatrolStatus("1"); form8.setPointName("8"); listPoint.add(form8); PointStateDemo form9 = new PointStateDemo(); form9.setPatrolStatusType(1); form9.setPatrolStatus("1"); form9.setPointName("9"); listPoint.add(form9); PointStateDemo form10 = new PointStateDemo(); form10.setPatrolStatusType(1); form10.setPatrolStatus("1"); form10.setPointName("10"); listPoint.add(form10); PointStateDemo form11 = new PointStateDemo(); form11.setPatrolStatusType(1); form11.setPatrolStatus("1"); form11.setPointName("11"); listPoint.add(form11); PointStateDemo form12 = new PointStateDemo(); form12.setPatrolStatusType(1); form12.setPatrolStatus("1"); form12.setPointName("12"); listPoint.add(form12); PointStateDemo form13 = new PointStateDemo(); form13.setPatrolStatusType(1); form13.setPatrolStatus("1"); form13.setPointName("13"); listPoint.add(form13); PointStateDemo form14 = new PointStateDemo(); form14.setPatrolStatusType(1); form14.setPatrolStatus("1"); form14.setPointName("14"); listPoint.add(form14); PointStateDemo form15 = new PointStateDemo(); form15.setPatrolStatusType(1); form15.setPatrolStatus("1"); form15.setPointName("15"); listPoint.add(form15); }catch(Exception ex) { Log.e("JSON Error: ", ex.toString()); } Page1Adapter page1Adapter = new Page1Adapter(mContext,listPoint); doingHolder.GridList.setAdapter(page1Adapter); break; case 1: doneHolder.taskName.setText(form.getTaskName()); doneHolder.taskTime.setText(form.getTaskTime()); doneHolder.taskState.setText(form.getTaskState()); //GridView listPoint = new ArrayList(); try { PointStateDemo form1 = new PointStateDemo(); form1.setPatrolStatusType(0); form1.setPatrolStatus("0"); form1.setPointName("1"); listPoint.add(form1); PointStateDemo form2 = new PointStateDemo(); form2.setPatrolStatusType(0); form2.setPatrolStatus("0"); form2.setPointName("2"); listPoint.add(form2); PointStateDemo form3 = new PointStateDemo(); form3.setPatrolStatusType(0); form3.setPatrolStatus("0"); form3.setPointName("3"); listPoint.add(form3); PointStateDemo form4 = new PointStateDemo(); form4.setPatrolStatusType(0); form4.setPatrolStatus("0"); form4.setPointName("4"); listPoint.add(form4); PointStateDemo form5 = new PointStateDemo(); form5.setPatrolStatusType(0); form5.setPatrolStatus("0"); form5.setPointName("5"); listPoint.add(form5); PointStateDemo form6 = new PointStateDemo(); form6.setPatrolStatusType(0); form6.setPatrolStatus("0"); form6.setPointName("6"); listPoint.add(form6); PointStateDemo form7 = new PointStateDemo(); form7.setPatrolStatusType(0); form7.setPatrolStatus("0"); form7.setPointName("7"); listPoint.add(form7); PointStateDemo form8 = new PointStateDemo(); form8.setPatrolStatusType(0); form8.setPatrolStatus("0"); form8.setPointName("8"); listPoint.add(form8); PointStateDemo form9 = new PointStateDemo(); form9.setPatrolStatusType(0); form9.setPatrolStatus("0"); form9.setPointName("9"); listPoint.add(form9); PointStateDemo form10 = new PointStateDemo(); form10.setPatrolStatusType(0); form10.setPatrolStatus("0"); form10.setPointName("10"); listPoint.add(form10); PointStateDemo form11 = new PointStateDemo(); form11.setPatrolStatusType(0); form11.setPatrolStatus("0"); form11.setPointName("11"); listPoint.add(form11); PointStateDemo form12 = new PointStateDemo(); form12.setPatrolStatusType(0); form12.setPatrolStatus("0"); form12.setPointName("12"); listPoint.add(form12); PointStateDemo form13 = new PointStateDemo(); form13.setPatrolStatusType(0); form13.setPatrolStatus("0"); form13.setPointName("13"); listPoint.add(form13); PointStateDemo form14 = new PointStateDemo(); form14.setPatrolStatusType(0); form14.setPatrolStatus("0"); form14.setPointName("14"); listPoint.add(form14); PointStateDemo form15 = new PointStateDemo(); form15.setPatrolStatusType(0); form15.setPatrolStatus("0"); form15.setPointName("15"); listPoint.add(form15); }catch(Exception ex) { Log.e("JSON Error: ", ex.toString()); } Page1Adapter2 page1Adapter2 = new Page1Adapter2(mContext,listPoint); doneHolder.GridList.setAdapter(page1Adapter2); break; } return convertView; } /** * ViewHolder类 */ static class ViewDoingHolder { TextView taskName; TextView taskTime; TextView taskState; GridView GridList; Button noBtn; Button okBtn; } static class ViewDoneHolder { TextView taskName; TextView taskTime; TextView taskState; GridView GridList; Button noBtn; Button okBtn; }}
Page1FormDemo.java
/** * Created by lmx on 2018/2/26. */public class Page1FormDemo { private int propertyType;//属性类型 0、1、2:未开始、进行中、已完成 private String taskName; private String taskDate; private String taskTime; private String taskState; public int getPropertyType() { return propertyType; } public void setPropertyType(int propertyType) { this.propertyType = propertyType; } public String getTaskName() { return taskName; } public void setTaskName(String taskName) { this.taskName = taskName; } public String getTaskDate() { return taskDate; } public void setTaskDate(String taskDate) { this.taskDate = taskDate; } public String getTaskTime() { return taskTime; } public void setTaskTime(String taskTime) { this.taskTime = taskTime; } public String getTaskState() { return taskState; } public void setTaskState(String taskState) { this.taskState = taskState; }}
page1_item1_demo.xml
<?xml version="1.0" encoding="utf-8"?>
page1_item2_demo.xml
<?xml version="1.0" encoding="utf-8"?>
Page1Adapter.java
import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.andbase.R;import com.andbase.patrol.gtDemo.model.PointStateDemo;import java.util.List;/** * Created by lmx on 2018/1/31. */public class Page1Adapter extends BaseAdapter { private Context mContext; private List lists; public Page1Adapter(Context context, List lists){ this.mContext = context; this.lists = lists; } @Override public int getCount() { return lists.size(); } @Override public int getItemViewType(int position) { //根据position返回指定的布局类型,比如0、1,根据这个返回值加载不同布局 return lists.get(position).getPatrolStatusType(); } @Override public int getViewTypeCount() { //这里是adapter里有几种布局 return 2; } @Override public Object getItem(int position) { return lists.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent){ PointStateDemo form = lists.get(position); //未巡检0 BlueViewHolder blueHolder = null; //正常1 DarkBlueViewHolder darkBlueHolder = null; if (form == null) { return null; } if (convertView == null){ switch (form.getPatrolStatusType()){ case 0://未巡检 convertView = LayoutInflater.from(mContext).inflate(R.layout.page_detail_item_blue_demo, parent, false); //使用减少findView的次数 blueHolder = new Page1Adapter.BlueViewHolder(); blueHolder.pointName = (TextView) convertView.findViewById(R.id.pointName); //设置标记 convertView.setTag(blueHolder); break; case 1://正常 convertView = LayoutInflater.from(mContext).inflate(R.layout.page_detail_item_dark_blue_demo, parent, false); //使用减少findView的次数 darkBlueHolder = new Page1Adapter.DarkBlueViewHolder(); darkBlueHolder.pointName = (TextView) convertView.findViewById(R.id.pointName); //设置标记 convertView.setTag(darkBlueHolder); break; } }else { switch (form.getPatrolStatusType()){ case 0: blueHolder = (Page1Adapter.BlueViewHolder) convertView.getTag(); break; case 1: darkBlueHolder = (Page1Adapter.DarkBlueViewHolder) convertView.getTag(); break; } } //设置数据 switch (form.getPatrolStatusType()){ case 0: blueHolder.pointName.setText(form.getPointName()); break; case 1: darkBlueHolder.pointName.setText(form.getPointName()); break; } return convertView; } /** * ViewHolder类 */ static class BlueViewHolder { TextView pointName; } static class DarkBlueViewHolder { TextView pointName; }}
Page1Adapter2.java
import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.andbase.R;import com.andbase.patrol.gtDemo.model.PointStateDemo;import java.util.List;/** * Created by lmx on 2018/1/31. */public class Page1Adapter2 extends BaseAdapter { private Context mContext; private List lists; public Page1Adapter2(Context context, List lists){ this.mContext = context; this.lists = lists; } @Override public int getCount() { return lists.size(); } @Override public int getItemViewType(int position) { //根据position返回指定的布局类型,比如0、1,根据这个返回值加载不同布局 return lists.get(position).getPatrolStatusType(); } @Override public int getViewTypeCount() { //这里是adapter里有几种布局 return 1; } @Override public Object getItem(int position) { return lists.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent){ PointStateDemo form = lists.get(position); //未巡检0 GrayViewHolder grayHolder = null; if (form == null) { return null; } if (convertView == null){ switch (form.getPatrolStatusType()){ case 0://未巡检 convertView = LayoutInflater.from(mContext).inflate(R.layout.page_detail_item_gray_demo, parent, false); //使用减少findView的次数 grayHolder = new Page1Adapter2.GrayViewHolder(); grayHolder.pointName = (TextView) convertView.findViewById(R.id.pointName); //设置标记 convertView.setTag(grayHolder); break; } }else { switch (form.getPatrolStatusType()){ case 0: grayHolder = (Page1Adapter2.GrayViewHolder) convertView.getTag(); break; } } //设置数据 switch (form.getPatrolStatusType()){ case 0: grayHolder.pointName.setText(form.getPointName()); break; } return convertView; } /** * ViewHolder类 */ static class GrayViewHolder { TextView pointName; }}
PointStateDemo.java
import com.ab.db.orm.annotation.Column;import com.ab.db.orm.annotation.Id;import com.ab.db.orm.annotation.Table;/** * Created by lmx on 2018/2/26. */@Table(name = "M_POINT_STATE")public class PointStateDemo { // _ID @Id主键,int类型,数据库建表时此字段会设为自增长 @Id @Column(name = "_id") public int _id; @Column(name = "id") private String id; @Column(name = "guid") private String guid; @Column(name = "task_id") private String taskId; @Column(name = "point_name") public String pointName; @Column(name = "patrol_status") private String patrolStatus; //根据状态不同,切换不同颜色 @Column(name = "patrol_status_type") private int patrolStatusType; public int getPatrolStatusType() { return patrolStatusType; } public void setPatrolStatusType(int patrolStatusType) { this.patrolStatusType = patrolStatusType; } public int get_id() { return _id; } public void set_id(int _id) { this._id = _id; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getGuid() { return guid; } public void setGuid(String guid) { this.guid = guid; } public String getTaskId() { return taskId; } public void setTaskId(String taskId) { this.taskId = taskId; } public String getPointName() { return pointName; } public void setPointName(String pointName) { this.pointName = pointName; } public String getPatrolStatus() { return patrolStatus; } public void setPatrolStatus(String patrolStatus) { this.patrolStatus = patrolStatus; }}
更多相关文章
- ConfigurationTest以及横竖屏切换及2.3与4.0Configuration的区别
- Android(安卓)沉浸式状态栏 最通俗易懂的总结
- 谷歌官方Android应用架构库——处理生命周期
- 关于ScrollView嵌套RecyclerView时RecyclerView不显示的问题
- Android的页面布局小结
- android 击缩略图查看大图
- Android快速开发框架ZBLibrary源码分享
- Android(安卓)高级编程--Fragment理解与使用
- color用法大全--Android布局背景颜色设置