2つ並べたListViewをある程度GridViewのように動作させようとしています。GridViewを使用しない理由は、スタッガードルックがサポートされていないためです。とにかく、私はこれまでに次のコードを持っています:
<-古い、今は無関係なコード->
編集:
@Samが提案したように、次のコードを使用しました。
lv1.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (touchSource == null) {
touchSource = v;
}
if (v == touchSource) {
lv2.dispatchTouchEvent(event);
if (event.getAction() == MotionEvent.ACTION_UP) {
clickSource = v;
touchSource = null;
}
}
return false;
}
});
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (parent == clickSource) {
//my own code here
}
}
});
lv1.setOnScrollListener(new OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (view == clickSource) {
}
boolean loadMore = /* maybe add a padding */
firstVisibleItem + visibleItemCount + 10 >= totalItemCount;
if (loadMore) {
//add items, load more
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
});
lv2.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (touchSource == null) {
touchSource = v;
}
if (v == touchSource) {
lv1.dispatchTouchEvent(event);
if (event.getAction() == MotionEvent.ACTION_UP) {
clickSource = v;
touchSource = null;
}
}
return false;
}
});
lv2.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (parent == clickSource) {
}
}
});
lv2.setOnScrollListener(new OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (view == clickSource) {
}
boolean loadMore = /* maybe add a padding */
firstVisibleItem + visibleItemCount + 2 >= totalItemCount;
if (loadMore) {
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
});
また、リストの1つでヘッダーを使用してスタッガード効果を作成しているので、このスタガーを維持する必要があります。これはほとんど機能しています(上記のコード)が、多くの場合非同期になります。これは、小さな短いスワイプがある場合にのみ発生することがわかりました。理由はわかりませんが、良い解決策を見つけることができません。上記のロジックが機能するはずだと私には思えます。
また、念のため、UniversalImageLoaderを使用して写真をロードし、単純なEndlessScrollロジックを使用してさらに写真をロードしています(adapter.notifyDataSetChanged()を直接呼び出しています)。しかし、このようなものはあまり関連性がないようです。写真が読み込まれていても、同期がとれていないことがわかります。
明確にしておきたいのですが、短いスワイプ(場合によっては一般的に繰り返しスクロール)を行うと、リストの同期を自由に解除できます。
どんな助けでも大歓迎です。ありがとう。
編集2:
まだ良い解決策を見つけるために。うまく機能しないことがわかった解決策は次のとおりです。
- 上記の解決策:同期を解除する頻度が高すぎる
- Pinterestリストビュー:OnScrollListener/onItemClickの区別なし
- StaggeredGridView:onScrollListenerなし
- スタッグプロジェクト:onItemClickリスナーなし
- 線形レイアウト方法:onItemClickリスナーなし
何か案は?ありがとう。