这里我们通过代码及注释来详细说明一下ListView的使用方法。 步骤: 1、定义一个实体类,作为ListView适配器的适配类型 class Color{ private String name; private int imageId; public Color(String name,int imageId){ this.name = name; this.imageId = imageId; } public String getName(){ return name; } public int getImageId(){ return imageId; } } 2、在layout下创建目标item的xml文件,并设置布局。设置item中的imageView时注意imageView的大小及图片的缩放处理 3、创建一个继承自ArratAdapter的适配器(类),注意泛型指定的数据类型 class ColorAdapter extends ArrayAdapter<Color>{ private int resourceId; public ColorAdapter(Context context, int resource, List<Color> objects) { //将上下文、ListView子项布局的id和数据传递进来 super(context, resource, objects); resourceId = resource; //保存ListView子项布局的id } @Override public View getView(int position, View convertView, ViewGroup parent) { //此方法在每个子项被滚动到屏幕内的时候被调用 //return super.getView(position, convertView, parent); //View view = LayoutInflater.from(getContext()).inflate(resourceId, null); //LayoutInflater来为这个子项加载我们传入的布局 Color color = getItem(position); //获取要显示在view上的数据 View view; ViewHolder viewHolder; if(convertView == null){ //避免了每次都加载一遍布局,当ListView快速滚动的时候就会出现瓶颈,通过此改动 view = LayoutInflater.from(getContext()).inflate(resourceId, null); //起始创建屏幕显示个数的view,当顶部的view彻底滑出屏幕的时候, /*初始化viewHolder*/ //滑出的view就进入到Recycler中准备进行复用, viewHolder = new ViewHolder(); //新滑进来的如果从Recycler中获取到了能复用的view,那么直接改写view中的数据即可 viewHolder.colorImage = (ImageView)view.findViewById(R.id.iv); viewHolder.colorName = (TxetView)view.findViewById(R.id.tv); view.setTag(viewHolder); //将viewHolder存储在view中 //如果Recycler中没有能重用的view,则创建新的(ListView中的一个子项) }else{ view = convertView; viewHolder = (ViewHolder)view.gettag(); //重新获取ViewHolder } /* ImageView colorImage = (ImageView)view.findViewById(R.id.iv); //分别获取item内控件的实例 TextView colorText = (TextView)view.findViewById(R.id.tv); colorImage.setImageResource(color.getImageId()); //分别调用set方法来设置控件内部显示的图片和文字 colorText.setText(color.getName()); */ viewHolder.colorImage.setImageResource(color.getImageId()); viewHolder.colorName.setText(color.getNmae()); return view; //将设置完的布局返回 } class ViewHolder{ //定义类,用来保存findViewById返回的实例 ImageView colorImage; TextView colorName; } } 4、创建一个ArrayList对象,用作数据和item之间的桥梁 private List<Color> colorlist = new ArrayList<Color>(); 5、由于得初始化item中的数据,可以将ArrayList的初始化封装在一个初始化函数中,在加载完布局文件之后调用初始化即可 private void initColor(){ Color black = new Color("black",R.drawable.black); colorlist.add(black); //把创建好的对象添加到colorlist中 Color pink = new Color("pink",R.drawable.pink); colorlist.add(pink); Color blue = new Color("blue",R.drawable.blue); colorlist.add(blue); Color red = new Color("red",R.drawable.red); colorlist.add(red); } 6、创建自定义适配器的对象,然后为ListView设置监听器即可 ColorAdapter adapter = new ColorAdapter(MainActivity.this, R.layout.color_item,colorlist); 7、为ListView设置监听器 lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this, colorList.get(position).getName(), Toast.LENGTH_SHORT).show(); } }); |
热点新闻
讲师博文
这里我们通过代码及注释来详细说明一下ListView的使用方法。 步骤: 1、定义一个实体类,作为ListView适配器的适配类型 class Color{ private String name; private int imageId; public Color(String name,int imag...
这里我们通过代码及注释来详细说明一下ListView的使用方法。 步骤: 1、定义一个实体类,作为ListView适配器的适配类型 class Color{ private String name; private int imageId; public Color(String name,int imageId){ this.name = name; this.imageId = imageId; } public String getName(){ return name; } public int getImageId(){ return imageId; } } 2、在layout下创建目标item的xml文件,并设置布局。设置item中的imageView时注意imageView的大小及图片的缩放处理 3、创建一个继承自ArratAdapter的适配器(类),注意泛型指定的数据类型 class ColorAdapter extends ArrayAdapter<Color>{ private int resourceId; public ColorAdapter(Context context, int resource, List<Color> objects) { //将上下文、ListView子项布局的id和数据传递进来 super(context, resource, objects); resourceId = resource; //保存ListView子项布局的id } @Override public View getView(int position, View convertView, ViewGroup parent) { //此方法在每个子项被滚动到屏幕内的时候被调用 //return super.getView(position, convertView, parent); //View view = LayoutInflater.from(getContext()).inflate(resourceId, null); //LayoutInflater来为这个子项加载我们传入的布局 Color color = getItem(position); //获取要显示在view上的数据 View view; ViewHolder viewHolder; if(convertView == null){ //避免了每次都加载一遍布局,当ListView快速滚动的时候就会出现瓶颈,通过此改动 view = LayoutInflater.from(getContext()).inflate(resourceId, null); //起始创建屏幕显示个数的view,当顶部的view彻底滑出屏幕的时候, /*初始化viewHolder*/ //滑出的view就进入到Recycler中准备进行复用, viewHolder = new ViewHolder(); //新滑进来的如果从Recycler中获取到了能复用的view,那么直接改写view中的数据即可 viewHolder.colorImage = (ImageView)view.findViewById(R.id.iv); viewHolder.colorName = (TxetView)view.findViewById(R.id.tv); view.setTag(viewHolder); //将viewHolder存储在view中 //如果Recycler中没有能重用的view,则创建新的(ListView中的一个子项) }else{ view = convertView; viewHolder = (ViewHolder)view.gettag(); //重新获取ViewHolder } /* ImageView colorImage = (ImageView)view.findViewById(R.id.iv); //分别获取item内控件的实例 TextView colorText = (TextView)view.findViewById(R.id.tv); colorImage.setImageResource(color.getImageId()); //分别调用set方法来设置控件内部显示的图片和文字 colorText.setText(color.getName()); */ viewHolder.colorImage.setImageResource(color.getImageId()); viewHolder.colorName.setText(color.getNmae()); return view; //将设置完的布局返回 } class ViewHolder{ //定义类,用来保存findViewById返回的实例 ImageView colorImage; TextView colorName; } } 4、创建一个ArrayList对象,用作数据和item之间的桥梁 private List<Color> colorlist = new ArrayList<Color>(); 5、由于得初始化item中的数据,可以将ArrayList的初始化封装在一个初始化函数中,在加载完布局文件之后调用初始化即可 private void initColor(){ Color black = new Color("black",R.drawable.black); colorlist.add(black); //把创建好的对象添加到colorlist中 Color pink = new Color("pink",R.drawable.pink); colorlist.add(pink); Color blue = new Color("blue",R.drawable.blue); colorlist.add(blue); Color red = new Color("red",R.drawable.red); colorlist.add(red); } 6、创建自定义适配器的对象,然后为ListView设置监听器即可 ColorAdapter adapter = new ColorAdapter(MainActivity.this, R.layout.color_item,colorlist); 7、为ListView设置监听器 lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this, colorList.get(position).getName(), Toast.LENGTH_SHORT).show(); } }); |
相关推荐
全国咨询热线:400-611-6270
?2004-2018华清远见教育科技集团 版权所有 京ICP备16055225号 京公海网安备11010802025203号