首页 > 有没有代替ListView,GridView的好用的第三方库呢?

有没有代替ListView,GridView的好用的第三方库呢?

我需要展现出很多东西,例如我要展示10个商品,需要用到ListView或者GridView,

但是,我发现,ListView和GridView的展示的话,必须先指定是10个商品,就是说展示的数量是先确定的。。。
假如我后期增加一个商品,那就被迫更新整个ListView或者GridView,,,
有没有能动态更新ListView或者GridView的第三方开源库呢?

还是附上代码:

        //绑定GridView
        g = (GridView) findViewById(R.id.grid);
        
        //创建一个List对象
        List<Map<String, Object>> listItems = new ArrayList<Map<String,Object>>();
        for(int i=0;i<images.length;i++){
            Map<String, Object> listItem = new HashMap<String, Object>();
            listItem.put("imageId", images[i]);
            listItems.add(listItem);
        }
        //创建一个SimpleAdapter
        SimpleAdapter simpleAdapter = new SimpleAdapter(
                this, 
                listItems, 
                R.layout.cell, 
                new String[]{"imageId"}, 
                new int[]{R.id.hehe});
        g.setAdapter(simpleAdapter);

代码看到,GridView是依赖适配器 SimpleAdapter去显示,那么,我想要增加一个内容,不就要重新造一个适配器吗。。。。


这只能说你对ListView的掌握还不够,ListView依赖于数据适配器Adapter的数据衔接,数据修改也存在于数据源或者数据适配器中,不是那你重新生成数据适配器。


直接在数据源List中add,然后通知Adapter去更新数据,adapter.notifyDataSetChanged();


使用适配器 Adapter 的 notifyDataSetChanged() 方法去更新。。。
举个栗子:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button_add = (Button) findViewById(R.id.button);

        //  1.绑定GridView
        gridView = (GridView) findViewById(R.id.gridView);

        //  2.创建List资源类对象:
        list = new ArrayList<Map<String, Object>>();
        for (int i=0; i<images.length; i++) {
            Map<String,Object> map = new HashMap<String, Object>();
            map.put("imageid",images[i]);
            map.put("words",words[i]);
            list.add(map);
        }

        //  3.创建一个 SimpleAdapter
        simpleAdapter = new SimpleAdapter(
                this,   //上下文
                list,   //资源对象
                R.layout.simple_adapter_cell,
                new String[] {"imageid","words"},
                new int[] {R.id.imageView,R.id.textView}                
        );

        //  4.加载到GridView中
        gridView.setAdapter(simpleAdapter);

        //  5.设置 GridView的点击事件:
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.e("AdapterView",Integer.toString(parent.getId()));
                Log.e("View",Integer.toString(view.getId()));
                Log.e("position",Integer.toString(position));
                Log.e("id", Long.toString(id));
            }
        });

        //  6.GridView 的动态更新
        button_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //  6.1 给资源类添加新的 Map
                Map<String,Object> temp = new HashMap<String, Object>();    //新建Map
                temp.put("imageid",images[0]);                              //添加新的资源
                temp.put("words","P");
                list.add(temp);

                //  6.2 通知 GridView 更新
                simpleAdapter.notifyDataSetChanged();

            }
        });


    }

recyclerView 配合staggergroidlayoutmanager
自己继承adapter
用adapter.notifydatachanged()来通知更新


将新数据添加到适配器的list中 然后adapter.notifiedxxx就行啦

【热门文章】
【热门文章】