Cómo sincronizar dos posiciones de ListView
Tengo dos ListViews
. ¿Hay alguna manera de sincronizar la posición de ListViews
cuando desplazo cualquiera de las listas. Estoy implementando un AbsListView.OnScrollListener
, registrando a ListView
. Cuando el ListView
se desplaza, el método onScroll()
de OnScrollListener
se activará, entonces llamo `smoothScrollToPosition () '. Pero sí funciona correctamente. ¿Puede alguien proporcionarme algún ejemplo de código para esto?
- FormsAppCompatActivity y MasterDetailPage: no hay barra de herramientas
- Cómo MvvmCross enlazar drawableId a Imageview
- Monodroid - Monodevelop limpia los datos del usuario mientras se despliega en el dispositivo
- FragmentPagerAdapter sólo existe en Android.Support.V4.App (y no en Android.App)
- Las pestañas de Android en fragmento con barra de herramientas de contracción
- Mono para Android, el campo de entrada de WebView filechooser no funciona
- Xamarin, Android. Cada vez que ejecute la aplicación en el dispositivo, la aplicación se unistalled y luego se instala de nuevo.
- Cómo pasar el parámetro al método java desde c # en JNI
- ¿Qué tema utiliza el diseñador de Xamarin para Mono para Android?
- "Aapt.exe" salió con el código 1 al crear el proyecto Mono para Android
- Registro Xamarin no manejado (Android sin capturar) excepciones
- Cómo manejar las excepciones MonoDroid sin capturar globalmente y evitar que la aplicación se bloquee
- NullReferenceException en la puesta en marcha de la aplicación Xamarin Droid
Aquí está una muestra de código de trabajo de lo que nininho está sugiriendo
Actividad principal
public class MainActivity extends Activity { public static String[] Cheeses = new String[] { "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi", "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre", "Allgauer Emmentaler", "Alverca", "Ambert", "American Cheese", }; ListView list1; ListView list2; boolean isLeftListEnabled = true; boolean isRightListEnabled = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, Cheeses); list1 = (ListView) findViewById(R.id.list1); list1.setAdapter(adapter); list2 = (ListView) findViewById(R.id.list2); list2.setAdapter(adapter); // IF YOU DO NOT OVERRIDE THIS // ONLY THE ONE THAT IS TOUCHED WILL SCROLL OVER list1.setOverScrollMode(ListView.OVER_SCROLL_NEVER); list2.setOverScrollMode(ListView.OVER_SCROLL_NEVER); list1.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // onScroll will be called and there will be an infinite loop. // That's why i set a boolean value if (scrollState == SCROLL_STATE_TOUCH_SCROLL) { isRightListEnabled = false; } else if (scrollState == SCROLL_STATE_IDLE) { isRightListEnabled = true; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { View c = view.getChildAt(0); if (c != null && isLeftListEnabled) { list2.setSelectionFromTop(firstVisibleItem, c.getTop()); } } }); list2.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == SCROLL_STATE_TOUCH_SCROLL) { isLeftListEnabled = false; } else if (scrollState == SCROLL_STATE_IDLE) { isLeftListEnabled = true; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { View c = view.getChildAt(0); if (c != null && isRightListEnabled) { list1.setSelectionFromTop(firstVisibleItem, c.getTop()); } } }); } }
el XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:splitMotionEvents="true"> <ListView android:id="@+id/list1" android:layout_width="0dip" android:layout_height="match_parent" android:layout_weight="1" /> <ListView android:id="@+id/list2" android:layout_width="0dip" android:layout_height="match_parent" android:layout_weight="1" /> </LinearLayout>
Si la posición es visible smoothScrollToPosition () no se desplazará. Se puede pensar en usar scrollTo o scrollBy en la otra lista que no está desplazándose en este momento, pero tenga cuidado de no introducir una recursión con cada lista llamando a la otra para desplazarse.
- Compartir la imagen con la intención de Android
- Android Listview item Cambio después de 10 segundos automáticamente?