Я пытаюсь сделать два бок о бок ListViews, как часть GridView. Причина, по которой я не использую GridView, заключается в том, что поддержка Staggered Look не поддерживается. В любом случае, у меня есть следующий код до сих пор:Синхронизация двух ListViews рядом с Android.
< - Старый, то теперь ненужный код ->
EDIT:
Я сделал так, как предложил и @ Сэм использовал следующий код:
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) {
}
});
Я также использую заголовок в одном из списков, чтобы создать эффект «Разнесенный», и мне нужно держать этот шаг в любой ценой. Это в основном работает (приведенный выше код), но он несинхронизирует много времени. Я понял, что это только тогда, когда у меня небольшие короткие удары. Я не знаю, почему, и я не могу найти хорошее решение. Мне кажется, что эта логика должна работать.
Кроме того, на всякий случай это важно, я использую UniversalImageLoader для загрузки фотографий и простой логики EndlessScroll для загрузки большего количества фотографий (напрямую вызываю адаптер.notifyDataSetChanged()). Однако этот материал не слишком уместен. Даже когда фотографии загружаются, я все еще вижу, что это несинхронизирует.
Я хочу быть ясным: если я делаю короткие звуки (а иногда и просто повторяющиеся прокрутки), я могу несинхронизировать списки по своему желанию.
Любая помощь приветствуется. Благодарю.
EDIT 2:
Тем не менее, чтобы найти хорошее решение. Вот те решения, которые я обнаружил, что не совсем работа:
- выше решения: unsyncs слишком часто
- Pinterest List View: нет OnScrollListener/onItemClick дифференциации
- StaggeredGridView: Нет onScrollListener
- Stag Project : Нет onItemClick слушатель
- Linear Layout Method: Нет onItemClick слушатель
Любые идеи? Благодарю.
По-видимому, Pinterest использует макет, подобный этому, вы можете найти различные подходы, если вы ищете здесь в Stack Overflow для ["android pinterest"] (http://stackoverflow.com/search?q= [android] + pinterest). – Sam
Да, я это понимаю. Я тоже много разбираюсь в этом. Я действительно получил часть этого источника из другого ответа на сетки стиля Pinterest, https://github.com/vladexologija/PinterestListView, но я не думаю, что он решает мою проблему дифференцирования onItemClicks и TouchEvents, имеющих отношение к прокрутке. – Kgrover
Я никогда не использовал приложение Pinterest, но когда кто-то спросил: [Android. Прокрутка 2 списка вместе] (http://stackoverflow.com/q/12342419/1267661) Я придумал решение, которое может вам помочь. (Он обрабатывает клики, как вы хотите, но иногда синхронизация прерывается ...) – Sam