Android--------ListView多条目展示数据

思路:主要是在布局中写好具体的布局种类和详情,最重要的是适配器中的操作,除了继承BaseAdapter需要重写的方法外,还要手动重写两个方法即:getTtemViewType和getViewTypeCount方法,在getTtemViewType方法中有几种布局就分几种情况然后返回,然后是getView方法中通过getTtemViewType()方法获得类型type  ,在对convertView进行判空里面对各种类型分类,比如 type1 都是文字的情况,需要找到布局,然后找到布局中的ID,取得标签后需要得到存放数据的该类 ,根据类型情况给文字或图片赋值接口类得到的相应内容,如 type1 都是文字,type2 是文字和图片结合:

 
  
 
  

首先把展示的不同分类写在Layout布局中,这里有两个不同的布局


item1

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/title1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <TextView
        android:id="@+id/title11"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

LinearLayout>

 item2
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="horizontal"
    >

    <LinearLayout
        android:layout_width="200dp"
        android:layout_height="198dp"
        android:orientation="vertical"
        >
        <TextView
            android:id="@+id/tltle2"
            android:text="sdsds"
            android:layout_width="wrap_content"
            android:layout_height="100dp" />
        <TextView
            android:id="@+id/tltle22"
            android:text="sdsds"
            android:layout_width="wrap_content"
            android:layout_height="100dp" />

    LinearLayout>

    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:src="@mipmap/ic_launcher"/>

LinearLayout>

Myadapter适配器类
public class Myadapter extends BaseAdapter {
private ArrayList mlist;
private Context mcontext;
//定义样式常量,注意常量值要从0开始
private final int type1=0;
private  final int type2=1;
public Myadapter(Context mcontext,ArrayList list) {

    this.mcontext = mcontext;
    this.mlist=list;
}

//手动重写的方法
    @Override
    public int getItemViewType(int position) {
     //   return super.getItemViewType(position);
        //获得类型  type2为有图片的那种类型  type1为只有文字的类型
      return mlist.get(position).getImgSrc().startsWith("http") ? type2 : type1;
    }

    //手动重写的方法
@Override
public int getViewTypeCount() {
    return 2;
}

@Override
public int getCount() {

    return mlist==null?0:mlist.size();
}

@Override
public Object getItem(int position) {

    return mlist.get(position);
}

@Override
public long getItemId(int position) {

    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder vh;
    int type = getItemViewType(position);
    //对convertView进行判空
    if (convertView==null){
        vh=new ViewHolder();
        //对类型的分类
        if (type==type1) {
            //类型一都是文字的情况,选中布局为item1,并找到该布局中的ID

            convertView = View.inflate(mcontext, R.layout.item1, null);
            vh.title = (TextView) convertView.findViewById(R.id.tv1);
            vh.content = (TextView) convertView.findViewById(R.id.tv11);
        }else if(type==type2) {

            //类型二是文字和图片的情况,选中布局为item2,并找到该布局中的ID
            convertView = View.inflate(mcontext, R.layout.item2, null);
            vh.title = (TextView) convertView.findViewById(R.id.tv2);
            vh.content = (TextView) convertView.findViewById(R.id.tv22);
            vh.iv = (ImageView) convertView.findViewById(R.id.image_view);

        }
        //设置标签
        convertView.setTag(vh);
    }else{
        //得到标签
        vh=(ViewHolder)convertView.getTag();
    }
    //得到该类,当是类型2的时候加载图片,
    News.DataBean.ArticleListBean news = mlist.get(position);
    if (type==type2) {
        Glide.with(mcontext).load(news.getImgSrc()).into(vh.iv);
    }


    //给文字和内容赋值接口类得到的相应内容
    vh.title.setText(news.getTitle());
    vh.content.setText(news.getSite());
    return convertView;
}

class ViewHolder{
    ImageView iv;
    TextView title;
    TextView content;
}

}

你可能感兴趣的:(Android--------ListView多条目展示数据)