11

AndroidのPagerAdapterクラスのメソッドgetItemPositionのドキュメントには、次のように記載されています。

ホストビューがアイテムの位置が変更されたかどうかを判断しようとしたときに呼び出されます。

このメソッドは、そのアダプターのアイテムのグループ内のアイテムの位置が変更されたかどうかを示すために呼び出されることになっています。

ただし、オーバーライドするメソッドが位置の変更をいつ考慮する必要があるかについては、決して述べられていません。位置が、アイテムgetItemPositionが最後に呼び出されたときの位置と異なることを意味しますか?アイテムの位置が、notifyDataSetChangedが最後に呼び出されたときと異なることを意味しますか?それとも、アイテムの位置が、アイテムがviewPagerに追加されたときと異なることを意味しますか?

4

2 に答える 2

13

getItemPositionでのみ呼び出されるViewPager.javaで確認できますdataSetChanged。これは、前回dataSetChanged呼び出されたときと異なる場合、アイテムの位置が変更されたことを意味します。

「変更された」の意味についてはあまり心配しません。2つのケースがあります:

  1. 追加されたアイテムの位置は変更されず、;をgetItemPosition返します。POSITION_UNCHANGED
  2. アイテムの位置が変わるか、アイテムが削除されます。アイテムの位置が変わらなかった場合は、戻っPOSITION_UNCHANGEDても実際の位置に違いはありません。したがって、実装を単純に保つために、位置(または)を返し、..POSITION_NONEを忘れることができます。POSITION_UNCHANGED
于 2012-06-20T22:03:20.207 に答える
8

デフォルトでは、ViewPager内のアイテムの位置は固定されていると見なされます。そのためgetItemPosition()、デフォルトで。を返しますPOSITION_UNCHANGED。アイテムを移動するとき、ViewPagerは、アイテムを削除する場所(アイテムの古い位置)と追加する場所を認識している必要があります。これはgetItemPosition()に使用されるものです。これにより、ページがインスタンス化された後でも、ViewPagerにどのアイテムをどこに配置するかを指示できます。

getItemPosition()notifyDataSetChanged()PagerAdapterを呼び出すときにのみ呼び出されます。notifyDataSetChanged()設計上、これは、ViewPagerが必要に応じて子を再描画するため、「変更された」は「ViewPagerが最後にページにデータを入力したときから変更された」ことを意味します。言い換えれば、「変更された」はあなたが言及した意味のいずれかを持っています。発生する最新のものはどれでも。

getItemPositionサンプルなしで理解するのはかなり難しいと思います。ここで使用する方法の私の例を参照してgetItemPosition(...)ください; いくつかのことが明らかになると思います。

于 2013-02-11T23:26:20.213 に答える