Listview 多布局优化
来源:互联网 发布:jquery form to json 编辑:程序博客网 时间:2024/05/24 01:43
listvew 多布局复用
- * 重写 getItemViewType,目的:告诉listview当前条目是哪一种类型*
- * 重写 getViewTypeCount,目的:告诉listview总共有几种类型*
- 在调用getview方法之前系统会自动调用getItemViewType方法,目的:判断该类型的布局是否有缓存过,如果有会在getview的conrview参数给予提供
Adapter
package com.example.doubuju_listview;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import java.util.List;/** * Created by admin on 2016/8/17. */public class MyAdater extends BaseAdapter { List<Context1> contextlist; MainActivity mainActivity; private String tag="MyAdapter"; public MyAdater(MainActivity mainActivity, List<Context1> contextlist) { this.mainActivity = mainActivity; this.contextlist=contextlist; } @Override public int getCount() { return contextlist.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } //告诉listview当前条目是哪一种类型 @Override public int getItemViewType(int position) { return contextlist.get(position).type; } //告诉listview总共有几种类型 @Override public int getViewTypeCount() { return 3; } /* * * 新增细节 1.在getview方法之前会调用getItemViewType方法判断此类型的item布局是否以前出现过, * 如果出现过getview方法中convertview参数为某个类型的item布局,否则此参数为空 * 2.listview中缓存getviewTypeCount()方法的返回值必须大于getItemViewType最大的返回值。 * 否则报indexoutofExeception * */ @Override public View getView(int position, View convertView, ViewGroup parent) { Context1 context1 = contextlist.get(position); int type = context1.type; LeftViewHolder leftViewHolder=null; CenterViewHolder centerViewHolder=null; RightViewHolder rightViewHolder=null; switch (type){ case 0: if (convertView == null) { //实例化条目 View inflate = View.inflate(mainActivity, R.layout.item_left, null); TextView lefttext = (TextView) inflate.findViewById(R.id.item_left); convertView=inflate; //存储条目中的各种控件实例 leftViewHolder = new LeftViewHolder(); leftViewHolder.textView=lefttext; inflate.setTag(leftViewHolder); Log.i(tag,"新建类型:"+type); }else{ leftViewHolder = (LeftViewHolder) convertView.getTag(); Log.i(tag,"复用类型:"+type); } //给控件赋值 leftViewHolder.textView.setText(context1.context1); break; case 1: if (convertView== null) { //实例化条目 View inflate = View.inflate(mainActivity, R.layout.item_center, null); TextView lefttext = (TextView) inflate.findViewById(R.id.item_center); //存条目布局实例 convertView=inflate; //存储条目中的各种控件实例 centerViewHolder = new CenterViewHolder(); centerViewHolder.textView=lefttext; inflate.setTag(centerViewHolder); Log.i(tag,"新建类型:"+type); }else{ centerViewHolder = (CenterViewHolder) convertView.getTag(); Log.i(tag,"复用类型:"+type); } centerViewHolder.textView.setText(context1.context1); break; case 2: if (convertView== null) { //实例化条目 View inflate = View.inflate(mainActivity, R.layout.item_right, null); TextView lefttext = (TextView) inflate.findViewById(R.id.item_right); //存条目布局实例 convertView=inflate; //存储条目中的各种控件实例 rightViewHolder = new RightViewHolder(); rightViewHolder.textView=lefttext; inflate.setTag(rightViewHolder); Log.i(tag,"新建类型:"+type); }else{ Log.i(tag,"复用类型:"+type); rightViewHolder = (RightViewHolder) convertView.getTag(); } rightViewHolder.textView.setText(context1.context1); break; default: break; } return convertView; } public class LeftViewHolder{ public TextView textView; } public class CenterViewHolder{ public TextView textView; } public class RightViewHolder{ public TextView textView; }}
布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/item_left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="左边"/></LinearLayout>---------------------------------------------------<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal"> <TextView android:id="@+id/item_center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="中间"/></LinearLayout>-------------------------------------------------------<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="right"> <TextView android:id="@+id/item_right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="右边"/></LinearLayout>
activity
package com.example.doubuju_listview;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.widget.ListView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private ListView mian_lv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mian_lv = (ListView) findViewById(R.id.main_lv); List<Context1> contextlist = new ArrayList<Context1>(); //模拟数据 for (int i=0;i<200;i++){ Context1 context1 = new Context1(); context1.context1=i+""; context1.type=i%3; Log.i("log",i%3+""); contextlist.add(i,context1); } mian_lv.setAdapter(new MyAdater(this,contextlist)); }}
Bean
package com.example.doubuju_listview;/** * Created by admin on 2016/8/17. */public class Context1 { public int type=0; public String context1=null;}
listview中缓存getviewTypeCount()方法的返回值必须大于getItemViewType最大的返回值。否则报indexoutofExeception
0 0
- Listview 多布局优化
- ListView Item多种布局优化
- ListView多种布局的优化
- ListView Item多种布局优化
- ListView Item多种布局优化
- 【listview精深系列4】listview多布局的使用(优化版)
- ListView Item使用多种布局优化
- Android 复杂布局的ListView优化思路
- 单item布局的listView优化
- ListView 多布局
- ListView多布局加载
- ListView的多布局
- ListView的多布局
- ListView多布局实现
- ListView的多布局
- ListView多布局展示
- Android listview多布局
- android listview多布局
- linux开放端口要放在22端口的下面
- 二叉树的各类操作
- Java构建Heap,进行Heap 排序(堆排序)
- 右键菜单添加项
- 建造者模式(java版)
- Listview 多布局优化
- 消息队列中点对点与发布订阅区别
- Java培训之java难点解析(七)-抽象类
- POJ 3281 Dining
- Scala List使用事项
- 分布式搜索Elasticsearch——QueryBuilders.matchQuery
- apk签名
- Miscellaneous | 恭喜本人博客进入2万名以内,多谢各位支持!
- C++11中std::unordered_map的使用