2013-07-15 184 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!最佳實踐! –