使用Android的Etsy的GridView的交错 [英] Using Etsy Android Staggered gridview
本文介绍了使用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< 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屋!
查看全文