Android笔记8

一、简单的ListView:
1、在xml拖入一个xml布局,在MainActivity中写入代码:

 public class MainActivity extends AppCompatActivity {
	private String[] data={"Apple","Banana","Orange","Pear","Grape","Cherry"};
	@Override
		protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,data);
    		ListView listView=(ListView)findViewById(R.id.list_view);
    		listView.setAdapter(adapter);
	}
     注:这里我们提供的都是字符串,因此将ArrayAdapter的泛型指定为String,然后ArrayAdapter的构造函数中一次传入上下文、ListView的子项布局id,以及要适配的数据。
           注意:我们使用了android.R.layout.simple_list_item_1作为ListView子项布局id,这是Android内置的布局文件,里面只有一个TextView,可用于简单显示一段文本。

二、定制ListView的界面:
1、先提供一组图片放置drawble中。
2、定义一个实体类,作为ListView适配器的适配类型。新建Fruit类:
注:自定义 Fruit类,这个类作为ListView适配器的适配类型。在简单布局中,子项为文本内容,所以使用String;在复杂布局中,子项为图片+文本,没有现成的类型可用,
所以自定义Fruit类,在Fruit类中定义用于记录文本的String类型变量,和用于记录图片ID的int类型变量。


```c
public class Fruit {
    	private String name;//水果名称
    	private int imageId;//图片资源Id
    	public Fruit(String name,int image){
        	   this.name=name;
        	   this.imageId=image;
    	  }
    	public String getName(){
        	    return  name;
    	   }
    	public int getImage(){
        	    return imageId;
    	 }        }

3、在layout目录下新建fruit_item.xml,拖入一个ImageView和一个TextView(垂直向上居中)排一下布局
4、自定义一个适配器,继承ArrayAdapter泛指Fruit类:

	public class FruitAdapter extends ArrayAdapter<Fruit> {
	public int resourceId;
	//将上下文、ListView子项布局id和ListView的数据都传到FruiteAdapter方法里面
	public FruitAdapter(Context context, int textViewesourceId, List<Fruit> objects) {
    	super(context,textViewesourceId,objects);
    	resourceId=textViewesourceId;
	}
@Override
//重写getView()方法,这个方法在每个子项被滚动到屏幕内会被调用
	public View getView(int position, View convertView,ViewGroup parent) {
   	Fruit fruit=getItem(position);  //得到当前想的Fruit实例,然后用LayoutInflater来为这个子项加载我们传入的布局
   	View view=LayoutInflater.from(getContext()).inflate(resourceId,parent,false);//false是ListView中的标准写法
   	ImageView fruitImage=(ImageView)view.findViewById(R.id.fruit_image) ;//调用View的findViewById()方法获取ImageView和TextView的实例
   	TextView fruitName=(TextView)view.findViewById(R.id.fruit_name);
   	fruitImage.setImageResource(fruit.getImage());//显示图片
  	 fruitName.setText(fruit.getName());//显示文字
   	return view;
 }
}    

5、修改MainActivity中的代码:

private List<Fruit> fruitList=new ArrayList<>();
	    @Override
	    protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
 	       setContentView(R.layout.activity_main);
	        initFruits();
		//获取fruit_item 界面的数据传给adapter,fruitList为数据
	        FruitAdapter adapter=new FruitAdapter(MainActivity.this,R.layout.fruit_item,fruitList);
	        ListView listView=(ListView)findViewById(R.id.list_view);
	        listView.setAdapter(adapter);//把数据显示出来
	    }
	        private void initFruits(){
	            for (int i=0;i<2;i++){
	               Fruit apple=new Fruit("Apple",R.drawable.apple);
	               fruitList.add(apple);
 	               Fruit banana=new Fruit("Banana",R.drawable.banana);
	               fruitList.add(banana);
	            }
	        }

三、ListView点击事件响应,代码如下:

listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Fruit fruit=fruitList.get(position); //position为判断点击的事哪一个子项。
                Toast.makeText(MainActivity.this,fruit.getName(),Toast.LENGTH_LONG).show();
            }
        });

四、过程总结:先有(textview、imageview)传入Fruit类,FruitAdapter调用这两个数据并布置好界面,最后在MainActivity创建FruitAdapter适配器显示出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值