ListView多条目加载
来源:互联网 发布:上海fly滑板店淘宝店 编辑:程序博客网 时间:2024/05/18 14:24
在现实的项目开发中,listView往往会加载不同类型的数据,这就要求我们要对listView进行多条目的加载,对数据类型进行判断,怎么判断呢?主要在适配器里面进行类型的判断。
结构图:
先看一下布局文件:
activity.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.day9listviewmore.MainActivity" > <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent"/></RelativeLayout>
list_item0.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.day9listviewmore.MainActivity" > <TextView android:id="@+id/tv0" android:layout_width="match_parent" android:layout_height="wrap_content" /></RelativeLayout>
list_item1.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.day9listviewmore.MainActivity" > <TextView android:id="@+id/tv1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <ImageView android:id="@+id/iv1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/tv1" android:src="@drawable/ic_launcher" /></RelativeLayout>
适配文件:
News.java:
public class News { int type; //10001:显示新闻 10002:显示广告 20001 20002 String title; public int getType() { return type; } public void setType(int type) { this.type = type; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public News(int type, String title) { super(); this.type = type; this.title = title; } @Override public String toString() { return "News [type=" + type + ", title=" + title + "]"; }}
主要代码如下:在listView适配器重写的四个方法的基础上,再手动重写两个方法,分别是:getViewTypeCount(),getItemViewType(int position),这两个方法,第一个是确定加载条木有几种数据类型,第二个是对数据进行判断和分类的。
MainActivity.java:
import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import com.example.day9listviewmore.bean.News;public class MainActivity extends Activity { ListView lv; List<News> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); initData(); MyAdapter adapter = new MyAdapter(); lv.setAdapter(adapter); } private void initData() { list = new ArrayList<News>(); for (int i = 0; i < 100; i++) { News news; if(i%7 == 5){ news = new News(10002, "广告" + i); }else{ news = new News(10001, "正文标题" + i); } list.add(news); } } /** * 1、需要重写两个方法 * 2、getViewTypeCount的返回值必须要大于getItemViewType的返回值 * 3、对于返回的Type类型 通常定义成 静态常量来区分 * @author Administrator * */ class MyAdapter extends BaseAdapter{ public static final int TYPE_ONE = 0; public static final int TYPE_TWO = 1; @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } //在使用多条目加载的时候 返回当前position对应的类型 //************必须满足的条件 getItemViewType的返回值 必须要小于getViewTypeCount的返回值 @Override public int getItemViewType(int position) { // TODO Auto-generated method stub if(list.get(position).getType() == 10001){ return TYPE_ONE; }else{ return TYPE_TWO; } } //使用多条目加载时 一共有几种类型 //从写该方法后,listview控件会知道 当前的布局样式不止一种 //所以 当ListView发现convertview在复用时 类型不配不上时 会重写让convertView加载一遍布局 @Override public int getViewTypeCount() { // TODO Auto-generated method stub return 2; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder0 holder0 = null; ViewHolder1 holder1 = null; int type = getItemViewType(position); if(convertView == null){ if(type == TYPE_ONE){ convertView = View.inflate(MainActivity.this, R.layout.list_item0, null); holder0 = new ViewHolder0(); holder0.tv0 = (TextView) convertView.findViewById(R.id.tv0); convertView.setTag(holder0); }else{ convertView = View.inflate(MainActivity.this, R.layout.list_item1, null); holder1 = new ViewHolder1(); holder1.tv1 = (TextView) convertView.findViewById(R.id.tv1); convertView.setTag(holder1); } }else{ if(type == TYPE_ONE){ holder0 = (ViewHolder0) convertView.getTag(); }else{ holder1 = (ViewHolder1) convertView.getTag(); } } //根据不同的情况 把进行赋值 if(type == TYPE_ONE){ holder0.tv0.setText(list.get(position).getTitle()); }else{ holder1.tv1.setText(list.get(position).getTitle()); } return convertView; } } public static class ViewHolder0{ TextView tv0; } public static class ViewHolder1{ TextView tv1; ImageView iv1; }}
阅读全文
0 0
- ListView多条目加载
- ListView 多条目加载
- listview多条目加载
- ListView多条目加载
- listview多条目加载
- ListView多条目加载
- ListView多条目加载
- ListView多条目加载
- ListView多条目加载
- listview多条目加载
- Listview多条目加载
- ListView多条目加载
- ListView多条目加载
- ListView多条目加载
- ListView多条目加载
- Listview多条目加载
- ListView多条目加载
- ListView多条目加载
- hdu1849 Nim博弈
- 进程控制(一)基本概念
- [JavaEE
- 加速度传感器的简单使用
- 删除recycler view中的视图
- ListView多条目加载
- java 开发中成员变量的问题
- 随记
- Spring Cloud Netflix Eureka源码导读与原理分析
- 通过爬虫迁移CSDN博客
- 数据结构二叉树BinaryTree之java构建二叉树
- JavaSE:冒泡法排序
- python 远程连接数据库出现的问题
- 一位老鸟对 23 种设计模式的有趣见解