Android listview多布局
来源:互联网 发布:php手机电视直播源码 编辑:程序博客网 时间:2024/05/19 19:43
Android listview多布局
使用listview多布局会出现一点问题:
由于多个item布局给单一的item布局是不一样的,使用起来,contentview的复用会出现问题。
避免出现问题的有这几个方法:
1.重写 getViewTypeCount() – 该方法返回多少个不同的布局
2.重写 getItemViewType(int) – 根据position返回相应的Item
3.根据view item的类型,在getView中创建正确的convertView
MainActivity
import android.content.Context;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;public class MainActivity extends AppCompatActivity { ListView listView; MyAdapter listAdapter; ArrayList<String> listString; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) this.findViewById(R.id.listview); listString = new ArrayList<String>(); for (int i = 0; i < 100; i++) { listString.add(Integer.toString(i)); } listAdapter = new MyAdapter(this); listView.setAdapter(listAdapter); } public class MyAdapter extends BaseAdapter { Context mContext; LinearLayout linearLayout = null; LayoutInflater inflater; TextView tex; final int VIEW_TYPE = 3; final int TYPE_1 = 0; final int TYPE_2 = 1; final int TYPE_3 = 2; public MyAdapter(Context context) { // TODO Auto-generated constructor stub mContext = context; inflater = LayoutInflater.from(mContext); } @Override public int getCount() { // TODO Auto-generated method stub return listString.size(); } //每个convert view都会调用此方法,获得当前所需要的view样式 @Override public int getItemViewType(int position) { // TODO Auto-generated method stub int p = position % 6; if (p == 0) return TYPE_1; else if (p < 3) return TYPE_2; else if (p < 6) return TYPE_3; else return TYPE_1; } //返回三个不同的布局 @Override public int getViewTypeCount() { // TODO Auto-generated method stub return 3; } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return listString.get(arg0); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } //创建正确的contentview复用 @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub viewHolder1 holder1 = null; viewHolder2 holder2 = null; viewHolder3 holder3 = null; int type = getItemViewType(position); //无convertView,需要new出各个控件 if (convertView == null) { Log.e("convertView = ", " NULL"); //按当前所需的样式,确定new的布局 switch (type) { case TYPE_1: convertView = inflater.inflate(R.layout.listitem1, parent, false); holder1 = new viewHolder1(); holder1.textView = (TextView) convertView.findViewById(R.id.textview1); holder1.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox); Log.e("convertView = ", "NULL TYPE_1"); convertView.setTag(holder1); break; case TYPE_2: convertView = inflater.inflate(R.layout.listitem2, parent, false); holder2 = new viewHolder2(); holder2.textView = (TextView) convertView.findViewById(R.id.textview2); Log.e("convertView = ", "NULL TYPE_2"); convertView.setTag(holder2); break; case TYPE_3: convertView = inflater.inflate(R.layout.listitem3, parent, false); holder3 = new viewHolder3(); holder3.textView = (TextView) convertView.findViewById(R.id.textview3); holder3.imageView = (ImageView) convertView.findViewById(R.id.imageview); Log.e("convertView = ", "NULL TYPE_3"); convertView.setTag(holder3); break; } } else { //有convertView,按样式,取得不用的布局 switch (type) { case TYPE_1: holder1 = (viewHolder1) convertView.getTag(); Log.e("convertView !!!!!!= ", "NULL TYPE_1"); break; case TYPE_2: holder2 = (viewHolder2) convertView.getTag(); Log.e("convertView !!!!!!= ", "NULL TYPE_2"); break; case TYPE_3: holder3 = (viewHolder3) convertView.getTag(); Log.e("convertView !!!!!!= ", "NULL TYPE_3"); break; } } //设置资源 switch (type) { case TYPE_1: holder1.textView.setText(Integer.toString(position)); holder1.checkBox.setChecked(true); break; case TYPE_2: holder2.textView.setText(Integer.toString(position)); break; case TYPE_3: holder3.textView.setText(Integer.toString(position)); holder3.imageView.setBackgroundResource(R.mipmap.ic_launcher); break; } return convertView; } } //各个布局的控件资源 class viewHolder1 { CheckBox checkBox; TextView textView; } class viewHolder2 { TextView textView; } class viewHolder3 { ImageView imageView; TextView textView; }}下面是四个xml布局:
activity_main
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.listview_more.MainActivity"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" ></ListView></RelativeLayout>
listitem1
<?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" > <TextView android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hahaahha" /> <CheckBox android:id="@+id/checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>listitem2
<?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"> <TextView android:id="@+id/textview2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1111111" /></LinearLayout>listitme3
<?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" > <TextView android:id="@+id/textview3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="888888888" /> <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
阅读全文
0 0
- Android listview多布局
- android listview多布局
- android 多个layout布局listView
- Android:ListView 多布局,加头部,尾部
- Android listview的多布局实现
- Android ListView通用单个多个布局
- Android ListView分组布局
- android之ListView布局
- Android布局(二)------ListView
- Android ListView自定义布局
- android之ListView布局
- android布局之listview
- Android 布局 listview
- android之ListView布局
- android之ListView布局
- Android布局之ListView
- Android ListView分组布局改进
- Android ListView分组布局改进
- idea中SVN的地址切换
- C/C++实现显示GIF动态图片
- 解决:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
- matlab路径添加为搜索路径
- string.Format对C#字符串格式化
- Android listview多布局
- Android打包生成的APK安装包,安装后一打开软件就闪退问题
- 机器学习中的数学(1):回归、梯度下降
- struts中用kindeditor实现的图片上传并且显示在页面上
- NDK重环境的搭建到书写demo
- HTTP与HTTPS的区别
- 2017住博会毕加索公司应邀参加BIM技术应用与建筑信息化交流会圆满结束
- 1014. 福尔摩斯的约会 (20)
- 初学python一些会用到的零件4函数【参考小甲鱼的书学习】