StaggeredGridView的使用

把开源库导入之后,在自己的工程右击Android的library添加导入的开源工程,就能正常使用

使用方法:

<com.etsy.android.grid.StaggeredGridView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/grid_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:item_margin="8dp"
    app:column_count="@integer/grid_column_count" />

首先在代码中获取它:

 mGridView = (StaggeredGridView) findViewById(R.id.grid_view);

使用方法其实和GridView无异的,照样要使用setAdapter(adapter);    setScrollListener();   setOnItemClickListener();   setOnItemLongClickListener();


一个一个看,首先是setScrollListener:

 @Override
    public void onScrollStateChanged(final AbsListView view, final int scrollState) {
        Log.d(TAG, "onScrollStateChanged:" + scrollState);
    }

    @Override
    public void onScroll(final AbsListView view, final int firstVisibleItem, final int visibleItemCount, final int totalItemCount) {
        Log.d(TAG, "onScroll firstVisibleItem:" + firstVisibleItem +
                            " visibleItemCount:" + visibleItemCount +
                            " totalItemCount:" + totalItemCount);
        // our handling
        if (!mHasRequestedMore) {
            int lastInScreen = firstVisibleItem + visibleItemCount;
            if (lastInScreen >= totalItemCount) {
                Log.d(TAG, "onScroll lastInScreen - so load more");
                mHasRequestedMore = true;
                onLoadMoreItems();
            }
        }
    }
这部分代码的意思,主要看onScroll这个函数,实现的是滑动到底部,动态加载Item的功能,如果当前画面的firstVisibleItem+当前画面的Item数>=总的Item数,表明需要加载新的数据,扩张adapter的数据,还要保证在加载数据的过程中不要又启动加载,不然会乱数据的:

 private void onLoadMoreItems() {
        final ArrayList<String> sampleData = SampleData.generateSampleData();
        for (String data : sampleData) {
            mAdapter.add(data);
        }
        // stash all the data in our backing store
        mData.addAll(sampleData);
        // notify the adapter that we can update now
        mAdapter.notifyDataSetChanged();
        mHasRequestedMore = false;
    }
这里的例子就是用mHasRequestedMore来控制的,进入加载数据之前把这个改true,然后再滑动就不能再开启加载了,直到这次加载完成之后才能再次启动加载的,在加载数据的函数中加载完了就把这个mHasRequestedMore设回去就行。如果使用的是线程来启动加载除了使用这种标志还可以判断线程是否active中来看是不是出于加载期间。



最后就是按Item的响应:

 @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        Toast.makeText(this, "Item Clicked: " + position, Toast.LENGTH_SHORT).show();
    }

    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
    {
        Toast.makeText(this, "Item Long Clicked: " + position, Toast.LENGTH_SHORT).show();
        return true;
    }




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值