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

来源:互联网 发布:js 短路 编辑:程序博客网 时间:2024/05/18 15:31

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);    }
}

0 0
原创粉丝点击