J'ai deux Comment "verrouiller" ces 2 Edit: Voici une capture d'écran de ce que j'ai, peut-être que cela va mieux expliquer ce que je vais faire. Le côté gauche (rouge) est une liste d'éléments et le côté droit est une liste séparée. Vous pouvez voir comment les listes ne s'alignent pas parfaitement, ce n'est donc pas exactement une grille. Ce que j'aimerais faire, c'est avoir cet acte comme une grosse liste, où faire défiler l'une quelcondroit une liste fera défiler également l'autre. P>
listview code> Objets que je voudrais faire défiler ensemble. Ils sont côte à côte, donc si on fait défiler une certaine quantité, l'autre défile de la même quantité. J'ai trouvé quelques exemples sur la façon de faire cela, mais je crois qu'ils s'appuient sur les éléments du listview code> étant la même hauteur (corrigez-moi si je me trompe). Les éléments de l'un de mes objets code> listview code> sont plus grands que ceux de l'autre, couvrant 2-3 éléments. P>
listview code> objets ensemble? p>
P>
4 Réponses :
Je pense qu'il est plus approprié d'utiliser une grille avec 2 colonnes, quelque chose comme ceci:
Merci pour la suggestion, mais je ne pense pas qu'un gridview fait ce que je cherche. Voir mon édition ci-dessus.
Ce que j'aimerais faire, c'est d'écouter l'événement de défilement de la liste de lecture de gauche, puis faites défiler la bonne liste de réception par un décalage correct. Ci-dessous mon code, je l'ai testé (très simple, vous montre simplement ma pensée) et vous pouvez ajouter votre code en fonction de celui-ci.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scrollbars="none">
</ListView>
<ListView
android:id="@+id/listView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scrollbars="none" >
</ListView>
</LinearLayout>
J'ai créé une classe approximative qui fait fondamentalement ce que je voulais faire. Il n'est pas assez intelligent de gérer si la 2e liste est plus longue que la 1ère ou si l'orientation change, mais il est suffisant pour obtenir le concept vers le bas.
Pour la configurer: P>
package com.xorbix.util;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
public class SyncedScrollListener implements OnScrollListener{
int offset;
int oldVisibleItem = -1;
int currentHeight;
int prevHeight;
private View mSyncedView;
public SyncedScrollListener(View syncedView){
if(syncedView == null){
throw new IllegalArgumentException("syncedView is null");
}
mSyncedView = syncedView;
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
int[] location = new int[2];
if(visibleItemCount == 0){
return;
}
if(oldVisibleItem != firstVisibleItem){
if(oldVisibleItem < firstVisibleItem){
prevHeight = currentHeight;
currentHeight = view.getChildAt(0).getHeight();
offset += prevHeight;
}else{
currentHeight = view.getChildAt(0).getHeight();
View prevView;
if((prevView = view.getChildAt(firstVisibleItem - 1)) != null){
prevHeight = prevView.getHeight();
}else{
prevHeight = 0;
}
offset -= currentHeight;
}
oldVisibleItem = firstVisibleItem;
}
view.getLocationOnScreen(location);
int listContainerPosition = location[1];
view.getChildAt(0).getLocationOnScreen(location);
int currentLocation = location[1];
int blah = listContainerPosition - currentLocation + offset;
mSyncedView.scrollTo(0, blah);
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
}
Désolé, cela ne fonctionne pas sur la deuxième liste de défilement, il désactive la vue de dessous de nombreux problèmes
Oui, cela ne fonctionne pas non plus pour moi. Je veux dire, la liaison de défilement fonctionne, mais les nouveaux éléments ne sont pas dessinés sur la liste défilée passive et que globalement, il est chaotique.
J'ai fini par utiliser la top s / o Réponse ici: Android. Défilement 2 ListVoyages ensemble P>
Les événements d'interception et de redirection semble être beaucoup plus élégant et cohérent que d'essayer de faire mes propres mathématiques sur les dimensions et l'état des envies de liste. P>
Plutôt que d'essayer de relier deux liste de liste, pourquoi ne fusionnez-vous pas le contenu des deux dans une liste de liste?