2013-07-15 136 views
0

我想实现我自己的StickyGridHeadersBaseAdapter,我的电流源代码在这里 - http://paste.org.ru/?11jrjh,我使用它像我有StickyGridHeaders自定义适配器

ModeAdapter adapter = new ModeAdapter(this); 
modeGridView.setAdapter(adapter); 

的问题是,

1)我有不知道如何调用notifyDataSetChanged()为这个适配器,所以我不能更改项目

2)而实现AdapterView.OnItemClickListener的(http://paste.org.ru/?mvgt7b)的作品怪

Mode mode = (Mode) adapter.getItem(position); 

对于第一个和第二个位置的项目返回null,第三个位置的项目是实际的第一个项目在适配器中。

我的错在哪里?

还有一个问题是为什么我不能在我的OnItemClickListener中投入adapterView.getAdapter()到我的ModeAdapter类。

如果我想在此打电话notifyDataSetChanged()怎么办? 我没有在这里找到任何自定义实现StickyGridHeadersBaseAdapter的例子。

在此先感谢。

+0

您可以用'adapter.notifyDataSetChanged()'。 – Raghunandan

回答

1

我有同样的问题,因为你2):

第一头我得到了前一行的项目之后,之后的第二头有两行的项目了,等...

原因是如下:

StickyHeadersGridView:

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    mOnItemClickListener.onItemClick(parent, view, mAdapter.translatePosition(position).mPosition, id); 
} 

的位置被校正。所以在你的onItemClick你可以得到正确的头寸价值。

如果比你有要求的项目:Mode mode = (Mode) adapter.getItem(position);StickyGridHeadersBaseAdapterWrapper.getItem(int pos)

@Override 
public Object getItem(int position) throws ArrayIndexOutOfBoundsException { 
    Position adapterPosition = translatePosition(position); 
    if (adapterPosition.mPosition == POSITION_FILLER || adapterPosition.mPosition == POSITION_HEADER) { 
     // Fake entry in view. 
     return null; 
    } 
    return mDelegate.getItem(adapterPosition.mPosition); 
} 

StickyGridHeadersBaseAdapterWrapper.getItem()位置导致要返回的错误的项目,第二次得到纠正......

我加一个解决方法:

在StickyHeadersBaseAdapterWrapper中我添加了:

public Object getItemAtDelegatePosition(int pos) { 
    return mDelegate.getItem(pos); 
} 

而且我用这个在onItemClick:

Mode item = (Mode) ((StickyGridHeadersBaseAdapterWrapper)parent.getAdapter()).getItemAtDelegatePosition(position); 
1

更简单的方式来获得一个项目将是:

StickyGridHeadersBaseAdapterWrapper wrapper = (StickyGridHeadersBaseAdapterWrapper) parent.getAdapter(); 
Mode item = (Mode) wrapper.getWrappedAdapter().getItem(position); 
+0

Tnx!最佳实践! –