美文网首页
Listview中显示不同的视图布局

Listview中显示不同的视图布局

作者: jsnow0613 | 来源:发表于2016-03-06 12:19 被阅读472次

1.使用场景

一个ListView中有多个布局的情况

2.ListView包含不同Item的布局

我们需要做这些工作:
1. 重写 getViewTypeCount() – 该方法返回多少个不同的布局
2. 重写 getItemViewType(int) – 根据position返回相应的Item
3. 根据view item的类型,在getView中创建正确的convertView

3.案例

package com.example.testing.listviewtest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
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 java.util.ArrayList;

import javax.crypto.spec.PSource;

public class MainActivity extends AppCompatActivity {

    private ListView listview;
    private ArrayList<String> datas = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listview = ((ListView) findViewById(R.id.lv));

        getdatas();

        listview.setAdapter(new MyAdapter());

    }

    /**
     * 获取数据
     *
     * @Author: ChengBin
     * @Time: 16/3/6 上午11:17
     */
    private void getdatas() {
        for (int i = 0; i < 100; i++) {
            datas.add(Integer.toString(i));
        }
    }

    class MyAdapter extends BaseAdapter {

        final int TYPE_1 = 0;
        final int TYPE_2 = 1;
        final int TYPE_3 = 2;
        private LayoutInflater inflater;

        @Override
        public int getCount() {
            return datas.size();
        }

        @Override
        public Object getItem(int position) {
            return datas.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public int getViewTypeCount() {
            return 3;
        }

        @Override
        public int getItemViewType(int position) {
            int type = position % 3;
            switch (type) {
                case 0:
                    return TYPE_1;
                case 1:
                    return TYPE_2;
                case 2:
                    return TYPE_3;
            }
            return TYPE_1;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder1 viewHolder1 = null;
            ViewHolder2 viewHolder2 = null;
            ViewHolder3 viewHolder3 = null;
            inflater = LayoutInflater.from(MainActivity.this);
            int type = getItemViewType(position);
            if (convertView == null) {
                switch (type) {
                    case TYPE_1:
                        convertView = inflater.inflate(R.layout.img, parent, false);
                        viewHolder1 = new ViewHolder1(convertView);
                        convertView.setTag(viewHolder1);
                        break;
                    case TYPE_2:
                        convertView = inflater.inflate(R.layout.text, parent, false);
                        viewHolder2 = new ViewHolder2(convertView);
                        convertView.setTag(viewHolder2);
                        break;
                    case TYPE_3:
                        convertView = inflater.inflate(R.layout.iv_tv, parent, false);
                        viewHolder3 = new ViewHolder3(convertView);
                        convertView.setTag(viewHolder3);
                        break;
                }
            } else {
                switch (type) {
                    case TYPE_1:
                        viewHolder1 = ((ViewHolder1) convertView.getTag());
                        break;
                    case TYPE_2:
                        viewHolder2 = ((ViewHolder2) convertView.getTag());
                        break;
                    case TYPE_3:
                        viewHolder3 = ((ViewHolder3) convertView.getTag());
                        break;
                }
            }
            switch (type) {
                case TYPE_1:
                    break;
                case TYPE_2:
                    viewHolder2.tv1.setText("item" + position);
                    break;
                case TYPE_3:
                    viewHolder3.tv_2.setText("item" + position);
                    break;
            }
            return convertView;
        }
    }

    class ViewHolder1 {

        private ImageView iv1;

        public ViewHolder1(View convertView) {
            iv1 = ((ImageView) convertView.findViewById(R.id.iv_1));
        }
    }

    class ViewHolder2 {
        private TextView tv1;

        public ViewHolder2(View convertView) {
            tv1 = ((TextView) convertView.findViewById(R.id.tv_1));
        }
    }

    class ViewHolder3 {
        private ImageView iv_2;
        private TextView tv_2;

        public ViewHolder3(View convertView) {
            iv_2 = ((ImageView) convertView.findViewById(R.id.iv_2));
            tv_2 = ((TextView) convertView.findViewById(R.id.tv_2));
        }
    }
}

相关文章

  • Listview中显示不同的视图布局

    1.使用场景 一个ListView中有多个布局的情况 2.ListView包含不同Item的布局 我们需要做这些工...

  • ListView 添加数据 (BaseAdapter)

    步骤: 在xml文件中定义ListView标签创建一个布局item,布局中创建ListView中要显示的条目布局创...

  • Android ListView与ListView嵌套问题

    ListView与ListView嵌套时,无法正常地显示布局。子布局与父布局,会出现索引引用错乱,布局重复、混乱的...

  • Swift 学习 View Layout and Present

    View Layout and Presentation(视图布局和显示) 在堆栈中组合视图,动态生成视图组和列表...

  • RecyclerView系列之七:LayoutManager

    在RecyclerView中,我们可以通过LayoutManager控制其布局的显示方式,实现横向ListView...

  • C# LIstView2019-02-18

    常用属性: 1.Items ListView中的项 2.View 制定显示哪种视图 ,例如LargeIcon--大...

  • ExpandableListView总结

    ExpandableListView是一个垂直滚动显示两级列表项的视图,与ListView不同的是,它可以有两层:...

  • ListView的使用

    ListView的使用1、显示简单内容,在布局管理器中新建 控件,布局管理后在主程序中使用ListView lis...

  • ListView分页加载数据(步骤)

    手动加载更多: 使用ListView显示网络数据列表给ListView添加一个脚布局并找到脚布局控件设置控件的点击...

  • 23.Slivers

    我们考虑一个这样的布局:一个滑动的视图中包括一个标题视图(HeaderView),一个列表视图(ListView)...

网友评论

      本文标题:Listview中显示不同的视图布局

      本文链接:https://www.haomeiwen.com/subject/ikdakttx.html