使用ArrayAdapter结合LisiView自定义一个列表

1.首先,我们要创建一个类来保存我们要显示在ListView上面的数据。下面定义了一个含有一个名字和一个资源ID的类MainItem.java

	public class MainItem {
    		private String name;
    		private  int imageId;

    		public MainItem(String name, int imageId){
        		this.name = name;
        		this.imageId = imageId;
    			}

    		public String getName(){
        return name;
    			}

    		public int getImageId(){
        		return imageId;
    			}
		}
    2.自定义一个ArrayAdapter,去适配我们要在界面上显示的内容MainItemAdapter.java
	
	public class MainItemAdapter extends ArrayAdapter<MainItem> {

    		private int resourceId;//记录下来稍后使用,见下面的构造函数

    		@Override
    		public View getView(int position, View convertView, ViewGroup parent) {//显示一行时将会调用它
        // 系统显示列表时,首先实例化一个适配器(这里将实例化自定义的适配器)。当手动完成适配时,必须手动映射数据,这需要重写getView()方法。
        // 系统在绘制列表的每一行的时候将调用此方法。position表示将显示的是第几行,covertView是从布局文件中inflate来的布局。parent是最终要显示的地方
        // 我们用LayoutInflater的方法将定义好的image_item.xml文件提取成View实例用来显示。然后将xml文件中的各个组件实例化(简单的findViewById()方法)。
        		MainItem mainItem = getItem(position);//getItem是ArrayAdapter的方法,它根据position获取MainItem对象
        		View view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false);//获取View
        		ImageView mainItemImage = (ImageView) view.findViewById(R.id.item_image);//将组件实例化,必须实例化,因为它是以view去
	//findViewById的,所以它自动添加到了view上面
TextView mainItenName = (TextView) view.findViewById(R.id.item_name);//将组件实例化,必须实例化 mainItemImage.setImageResource(mainItem.getImageId());//设置组件内容 mainItenName.setText(mainItem.getName());//设置组件内容 return view;//返回视图View,这里它只是ListView的一行 } public MainItemAdapter(Context context, int resourceId, List<MainItem> objects) {//构造函数,顺便记录resourceId //context是前面传入的上下文Context,resourceId可以显示一行文字的一个布局文件的Id,所以这里需要记录它而放在getView()中使用,objects是数据源 super(context, resourceId, objects); this.resourceId = resourceId; } }
	}
	3.在主文件中添加数据源并设置该适配器:
	
	public class MainActivity extends AppCompatActivity {

    		private List<MainItem> itemList = new ArrayList<MainItem>();

    		@Override
    		protected void onCreate(Bundle savedInstanceState) {

        		super.onCreate(savedInstanceState);
        		setContentView(R.layout.activity_main);
        		initMainItem(); //初始化数据
        		MainItemAdapter adapter = new MainItemAdapter(MainActivity.this, R.layout.main_item, itemList);//Arrayadapter的三个参数,
        // 分别是上下文Context、可以显示一行文字的一个布局文件和数据源,分别传给MainItemAdapter的构造函数
        		GridView gridView = (GridView) findViewById(R.id.grid_view);
        		gridView.setAdapter(adapter);
        		gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            		@Override
           		 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                		MainItem item = itemList.get(position);
                		showNewActivity(item.getName());
            		}
        		});
    		}

    		private void initMainItem() {
        		MainItem item_1 = new MainItem("记账本", R.drawable.account_book);
        		itemList.add(item_1);
        		MainItem item_2 = new MainItem("备忘录", R.drawable.memo_info);
        		itemList.add(item_2);
        		MainItem item_3 = new MainItem("计算器", R.drawable.calculator);
        		itemList.add(item_3);
        		MainItem item_4 = new MainItem("通讯录", R.drawable.phone_book);
        		itemList.add(item_4);
        		MainItem item_5 = new MainItem("天气", R.drawable.weather_info);
        		itemList.add(item_5);
        		MainItem item_6 = new MainItem("关于", R.drawable.help_info);
        		itemList.add(item_6);
    		}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值