使用Android的Etsy的GridView的交错 [英] Using Etsy Android Staggered gridview

查看:168
本文介绍了使用Android的Etsy的GridView的交错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

荫使用 https://github.com/etsy/AndroidStaggeredGrid 实现StaggeredGridView我的应用程序。我得到一个NullPointerException异常,当我尝试初始化我DynamicHeightImageView。

我找不出什么错误。

下面是我的code: -

row_staggered.xml

 < com.etsy.android.grid.util.DynamicHeightImageView
        机器人:ID =@ + ID / imgViewDynamic
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent
        机器人:scaleType =centerCrop/>

StaggeredAdapter.java

 静态类LazyViewHolder
         {             DynamicHeightImageView thumb_image;         }
    @覆盖
         公共查看getView(INT位置,查看convertView,父母的ViewGroup)
        {            LazyViewHolder viewHolder;            如果(convertView == NULL)
                convertView = inflater.inflate(R.layout.row_staggered,NULL);           viewHolder =新LazyViewHolder();
         viewHolder.thumb_image =(DynamicHeightImageView)convertView.findViewById(R.id.imgViewDynamic); //拇指图像    imageLoader.DisplayImage(bitmapUrl,viewHolder.thumb_image); //这里的错误行215
}

ExtendableListView.java

  / **
     *获取一个视图,并将它显示与指定相关的数据
     *位置。当我们已经发现的观点是这就是所谓的
     *不适用于在回收站中重用。剩下的唯一选择是
     *转换的旧观点或作出一个新的。
     *
     * @参数位置显示位置
     至少1布尔* @参数isScrap阵列中,第一项将成为如果属实
     *返回的视图是从垃圾堆采取虚假否则。
     返回:显示与特定位置相关的数据视图
     * /
    私人查看obtainView(INT位置,布尔[] isScrap){
        isScrap [0] = FALSE;
        查看scrapView;        scrapView = mRecycleBin.getScrapView(位置);        查看子女;
        如果(scrapView!= NULL){
            如果(DBG)Log.d(TAG,从废品位置getView:+位置);
            孩子= mAdapter.getView(位置,scrapView,这一点);            如果(孩子!= scrapView){
                mRecycleBin.addScrapView(scrapView,位置);
            }
            其他{
                isScrap [0] =真;
            }
        }
        其他{
            如果(DBG)Log.d(TAG,getView立场:+位置);
            孩子= mAdapter.getView(位置,空,这一点); //这里的错误
        }        返回子女;
    }
 / **
     *获取景色的新视图中使用的视图?或回收的观点,并将其添加到我们的孩子
     * /
    私人查看makeAndAddView(INT位置,INT Y,布尔流程细化,布尔选择){
        查看子女;        onChildCreated(位置,流程细化);        如果(!mDataChanged){
            //尝试使用现有的观点对这一立场
            孩子= mRecycleBin.getActiveView(位置);
            如果(孩子!= NULL){                //找到它 - 我们正在使用现有子
                //这只是需要被定位
                setupChild(儿童,位置,Y,流程细化,选择,真正的);
                返回子女;
            }
        }        //创建一个新的视图这个位置,或者如果可能转换一个未使用的视图
        孩子= obtainView(位置,mIsScrap); // ERROR HERE
        //这需要被定位和测量
        setupChild(子,位置,Y,流程细化,选择,mIsScrap [0]);        返回子女;
    } 私人查看fillDown(INT POS,诠释nextTop){
        如果(DBG)Log.d(TAGfillDown - POS:+ POS +nextTop:+ nextTop);        查看selectedView = NULL;        INT结束=的getHeight();
        如果(mClipToPadding){
            结束 - = getListPaddingBottom();
        }        而((nextTop<年底|| hasSpaceDown())及和放大器; POS&L​​T; mItemCount){
            // TODO:加选择的支持
            makeAndAddView(POS,nextTop,真,假);
            POS ++;
            nextTop = getNextChildDownsTop(POS) // = child.getBottom();
        }        返回selectedView;
    }
 / **
     *填充列表从上到下,从mFirstPosition
     * /
    私人查看fillFromTop(INT nextTop){
        mFirstPosition = Math.min(mFirstPosition,mItemCount - 1);
        如果(mFirstPosition℃,){
            mFirstPosition = 0;
        }
        返回fillDown(mFirstPosition,nextTop);
    }            开关(mLayoutMode){
                案例LAYOUT_FORCE_TOP:{
                    mFirstPosition = 0;
                    resetToTop();
                    adjustViewsUpOrDown();
                    fillFromTop(childrenTop);
                    adjustViewsUpOrDown();
                    打破;
                }

我得到一个错误: -

  5月6日至10日:05:23.389:E / AndroidRuntime(2178):显示java.lang.NullPointerException
5月6日至10日:05:23.389:E / AndroidRuntime(2178):在Utility.StaggeredAdapter.getView(StaggeredAdapter.java:215)
5月6日至10日:05:23.389:E / AndroidRuntime(2178):在com.etsy.android.grid.ExtendableListView.obtainView(ExtendableListView.java:1578)
5月6日至10日:05:23.389:E / AndroidRuntime(2178):在com.etsy.android.grid.ExtendableListView.makeAndAddView(ExtendableListView.java:1402)
5月6日至10日:05:23.389:E / AndroidRuntime(2178):在com.etsy.android.grid.ExtendableListView.fillDown(ExtendableListView.java:1288)
5月6日至10日:05:23.389:E / AndroidRuntime(2178):在com.etsy.android.grid.ExtendableListView.fillFromTop(ExtendableListView.java:1336)
5月6日至10日:05:23.389:E / AndroidRuntime(2178):在com.etsy.android.grid.ExtendableListView.layoutChildren(ExtendableListView.java:587)


解决方案

试一试在你的** StaggeredAdapter.java **类

  ImageLoader的ImageLoader的=新ImageLoader的();
 //定义值ImageLoader的

Iam using https://github.com/etsy/AndroidStaggeredGrid to achieve a StaggeredGridView for my app. I get a NullPointerException when I try to initialize my DynamicHeightImageView.

I cant figure out what is going wrong.

Here is my code:-

row_staggered.xml

<com.etsy.android.grid.util.DynamicHeightImageView
        android:id="@+id/imgViewDynamic"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop" />

StaggeredAdapter.java

     static class LazyViewHolder
         {

             DynamicHeightImageView thumb_image;

         }
    @Override
         public View getView(int position, View convertView, ViewGroup parent)
        {

            LazyViewHolder viewHolder;

            if(convertView==null)
                convertView = inflater.inflate(R.layout.row_staggered,null);

           viewHolder = new LazyViewHolder();
         viewHolder.thumb_image=(DynamicHeightImageView)convertView.findViewById(R.id.imgViewDynamic); // thumb image

    imageLoader.DisplayImage(bitmapUrl, viewHolder.thumb_image); //Error here Line 215
}

ExtendableListView.java

     /**
     * Get a view and have it show the data associated with the specified
     * position. This is called when we have already discovered that the view is
     * not available for reuse in the recycle bin. The only choices left are
     * converting an old view or making a new one.
     *
     * @param position The position to display
     * @param isScrap  Array of at least 1 boolean, the first entry will become true if
     *                 the returned view was taken from the scrap heap, false if otherwise.
     * @return A view displaying the data associated with the specified position
     */
    private View obtainView(int position, boolean[] isScrap) {
        isScrap[0] = false;
        View scrapView;

        scrapView = mRecycleBin.getScrapView(position);

        View child;
        if (scrapView != null) {
            if (DBG) Log.d(TAG, "getView from scrap position:" + position);
            child = mAdapter.getView(position, scrapView, this);

            if (child != scrapView) {
                mRecycleBin.addScrapView(scrapView, position);
            }
            else {
                isScrap[0] = true;
            }
        }
        else {
            if (DBG) Log.d(TAG, "getView position:" + position);
            child = mAdapter.getView(position, null, this); //Error here
        }

        return child;
    }
 /**
     * Gets a view either a new view an unused view?? or a recycled view and adds it to our children
     */
    private View makeAndAddView(int position, int y, boolean flowDown, boolean selected) {
        View child;

        onChildCreated(position, flowDown);

        if (!mDataChanged) {
            // Try to use an existing view for this position
            child = mRecycleBin.getActiveView(position);
            if (child != null) {

                // Found it -- we're using an existing child
                // This just needs to be positioned
                setupChild(child, position, y, flowDown, selected, true);
                return child;
            }
        }

        // Make a new view for this position, or convert an unused view if possible
        child = obtainView(position, mIsScrap); //ERROR HERE
        // This needs to be positioned and measured
        setupChild(child, position, y, flowDown, selected, mIsScrap[0]);

        return child;
    }

 private View fillDown(int pos, int nextTop) {
        if (DBG) Log.d(TAG, "fillDown - pos:" + pos + " nextTop:" + nextTop);

        View selectedView = null;

        int end = getHeight();
        if (mClipToPadding) {
            end -= getListPaddingBottom();
        }

        while ((nextTop < end || hasSpaceDown()) && pos < mItemCount) {
            // TODO : add selection support
            makeAndAddView(pos, nextTop, true, false);
            pos++;
            nextTop = getNextChildDownsTop(pos); // = child.getBottom();
        }

        return selectedView;
    }
 /**
     * Fills the list from top to bottom, starting with mFirstPosition
     */
    private View fillFromTop(int nextTop) {
        mFirstPosition = Math.min(mFirstPosition, mItemCount - 1);
        if (mFirstPosition < 0) {
            mFirstPosition = 0;
        }
        return fillDown(mFirstPosition, nextTop);
    }

            switch (mLayoutMode) {
                case LAYOUT_FORCE_TOP: {
                    mFirstPosition = 0;
                    resetToTop();
                    adjustViewsUpOrDown();
                    fillFromTop(childrenTop);
                    adjustViewsUpOrDown();
                    break;
                }

I get an error:-

06-10 05:05:23.389: E/AndroidRuntime(2178): java.lang.NullPointerException
06-10 05:05:23.389: E/AndroidRuntime(2178): at Utility.StaggeredAdapter.getView(StaggeredAdapter.java:215)
06-10 05:05:23.389: E/AndroidRuntime(2178): at com.etsy.android.grid.ExtendableListView.obtainView(ExtendableListView.java:1578)
06-10 05:05:23.389: E/AndroidRuntime(2178): at com.etsy.android.grid.ExtendableListView.makeAndAddView(ExtendableListView.java:1402)
06-10 05:05:23.389: E/AndroidRuntime(2178): at com.etsy.android.grid.ExtendableListView.fillDown(ExtendableListView.java:1288)
06-10 05:05:23.389: E/AndroidRuntime(2178): at com.etsy.android.grid.ExtendableListView.fillFromTop(ExtendableListView.java:1336)
06-10 05:05:23.389: E/AndroidRuntime(2178): at com.etsy.android.grid.ExtendableListView.layoutChildren(ExtendableListView.java:587)

解决方案

Try This in your **StaggeredAdapter.java ** class

 ImageLoader imageloader = new ImageLoader(); 
 // defining value to imageLoader

这篇关于使用Android的Etsy的GridView的交错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆