ListView控件的作用以及使用方法

1.ListView的作用:

用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有数据则会滚出屏 幕。例如(查看QQ聊天记录,翻阅微博最新消息等等)

2.ListView简单使用方法:

        2.1.将ListView添加到页面布局里

        2.2.ListView在活动里干了三件事

                (1)找到控件

                (2)创建构造器(new ArrayAdapter<T>)构造函数中传入  (当前上下文,ListView子项布局id,适配的数据)

                (3)控件中.setAdapter()方法,将创建好的构造器传进去。

3.定制ListView的界面(明确4步就行)

//1.首先需要创建layout布局,定制样式。
	//2.创建相应类(Fruit),对layout里面所需数据进行设置
	//也就是get,set,构造函数
	//3.自定义适配器,对相应的布局进行更改和设置(重点)
     //首先fanAdapter继承ArrayAdapter,泛型是创建的实体类
     public class fanAdapter extends ArrayAdapter<Fruit> 
     //重写构造函数方法,我们只需用到第二个意思是子项布局的id(取出来赋值全局变量,方便后续操作)
     //子项布局id:可以理解成	listview里面的每一行列
     public fanAdapter(@NonNull Context context, int resource, @NonNull List<Demofan> 		objects) {
        super(context, resource, objects);
        resourceId = resource;
   	 }
	//重写getView方法,这个方法在每个子项被滚动到屏幕内的时候会被调用。也就是刷新滚动页面
	//这个可以理解成对每一行里的每一个控件进行操作
	public View getView(int position, @Nullable View convertView, @NonNull ViewGroup 		parent) {
        //通过getItem方法得到fruit实例:position也可以理解成子项id,位置
        Fruit fruit = getItem(position);
        //convertView参数:判断是否为空,如果为空就加载布局,否则重用布局
        //好处:提高效率,快速滚动时候性能更好
        if(convertView ==null){
            //使用LayoutInflater来为我们子项加载布局,传入子项布局id,视图,false是固定的
            view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false);
            //实例化viewHolder
            viewHolder = new ViewHolder();
            viewHolder.images = (ImageView) view.findViewById(R.id.images);
            viewHolder.titles = (TextView) view.findViewById(R.id.titles);
            //调用View的setTag方法,将ViewHolder对象储存在View中
            view.setTag(viewHolder);
        }else{
            //当convertView不为null的时候,则调用View的getTag方法,把ViewHoler重新取出,这样每次
            //都是通过缓存取出
            view = convertView;
            viewHolder = (ViewHolder) view.getTag();

        }
        //简单设置数据操作
        viewHolder.images.setImageResource(fan.getImageId());
        viewHolder.titles.setText(fan.getName());
       /* TextView titles = (TextView) view.findViewById(R.id.titles);
        ImageView images = (ImageView) view.findViewById(R.id.images);
        titles.setText(fan.getName());
        images.setImageResource(fan.getImageId());*/
        return view;
    }
		//新增一个内部类ViewHolder,用于对控件的实例进行缓存
     class ViewHolder {
        ImageView images;
        TextView titles;
    }
	//4.在MainActivity里进行应用。
        //定义new ArrayList存储数据,(多态)
        private List<Fruit> fruitList = new ArrayList<>();
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //里面就是写入数据的方法
        initFruits();
        //实例化这个自定义构造器
        fanAdapter fanAdapter = new fanAdapter(MainActivity.this, R.layout.fan_item, fruitList);
        ListView list = (ListView) findViewById(R.id.list_view);
        //listview监听点击事件
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            //int i是判断哪一个子项
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Demofan demofan = fruitList.get(i);
                String s = l + "";
                //显示数据
                Toast.makeText(MainActivity.this, demofan.getName()+s, Toast.LENGTH_SHORT).show();
            }
        });
        //把数据通过setAdapter传入到listView中
        list.setAdapter(fanAdapter);
    }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值