Mantener la vista de lista y el buscador de vistas sincronizados
Perdóname si el título es un poco vago, estoy teniendo problemas para redactar este problema, que es también por qué no puedo encontrar ningún ejemplo a través de Google.
Estoy usando el maestro / diseño de flujo de detalle en mi aplicación, ya que en su mayoría se desarrollan en una tableta.
- Mostrar TextView con 2 colores separados usando la máscara
- CookieSyncManager :: createInstance () necesita ser llamado antes de CookieSyncManager :: getInstance ()
- Vista deslizante desde abajo
- ¿Cómo se limita el número de puntos de vista?
- Reutilizar un atributo android estándar en mi vista personalizada
La implementación sigue el patrón habitual, dos Fragmentos que están contenidos en una Actividad y la tengo funcionando perfectamente. En este caso, el detalle es en realidad un ViewPager
, con ViewPager
y ListView
siendo formas alternativas de mostrar los mismos datos.
Por lo tanto, la selección de un elemento de la lista desplazará el ViewPager
a la posición y el deslizamiento a través de actualizará el elemento seleccionado en la lista.
Esto es lo que tengo hasta ahora:
MainActivity.java
public class MainActivity extends ActionBarActivity implements VideoListFragment.Callbacks, VideoDetailFragment.Callbacks { @Override public void onItemSelected(String callingClass, int id) { //Work out which one we're updating based on which class called this method if (callingClass == VideoListFragment.VIDEO_LIST_ID) { //Update the VideoDetail VideoDetailFragment fragment = (VideoDetailFragment) getSupportFragmentManager().findFragmentById(R.id.content_pane); if (fragment != null) { fragment.setViewPagerPosition(id); } else { Bundle arguments = new Bundle(); arguments.putInt(VideoDetailFragment.VIDEO_ID, id); fragment = new VideoDetailFragment(); fragment.setArguments(arguments); getSupportFragmentManager().beginTransaction() .replace(R.id.content_pane, fragment) .commit(); } } else if (callingClass == VideoDetailFragment.VIDEO_DETAIL_ID) { //Update the VideoList VideoListFragment fragment = (VideoListFragment) getSupportFragmentManager().findFragmentById(R.id.list_pane); fragment.setSelection(id); } } }
ListFragment.java
public class ListFragment extends ListFragment { public interface Callbacks { public void onItemSelected(String callingClass, int id); } @Override public void onListItemClick(ListView listView, View view, int position, long id) { super.onListItemClick(listView, view, position, id); setSelection(position); mCallbacks.onItemSelected(VIDEO_LIST_ID, position); } @Override public void setSelection(int position) { mListView.setItemChecked(position, true); mListView.smoothScrollToPosition(position); } }
VideoDetailFragment.java
public class VideoDetailFragment extends Fragment { public interface Callbacks { public void onItemSelected(String callingClass, int id); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { //Left if (mListPosition > position + positionOffset) { mCallbacks.onItemSelected(VIDEO_DETAIL_ID, position); } else //Right { mCallbacks.onItemSelected(VIDEO_DETAIL_ID, position); } } }
Es un sistema bastante básico, pero funciona en su mayor parte, el único problema es que el sistema a menudo llama a onPageScrolled
cuando se están actualizando las vistas, como cuando se descargan nuevos datos y se llama a notifyDatasetChanged
. Esto conduce a un montón de ida y vuelta con la selección listview vuelo hacia arriba y hacia abajo y se ve pegajosa en general.
Un buen ejemplo de lo que quiero es la aplicación de GMail, que tiene el flujo de detalle maestro y actualizaciones sin problemas. ¿Hay ejemplos de código de esto en cualquier parte?
Gracias por adelantado.
- Cómo hacer que SearchView siempre se expande en android?
- ¿Qué significa el parámetro LayoutInflater attachToRoot?
- Vista de navegación inferior con elemento personalizado (actionLayout)
- No se puede mostrar 2 instancias de mi SurfaceView personalizado
- Animar dibujo de círculo / arco sobre lienzo
- Cómo implementar Swipe en Android juego sin vista
- Cómo centrar una vista dentro de un diseño Android?
- El método no estático 'getSharedPreferences (java.lang.String, int)' no se puede referenciar desde un contexto estático
- Obtener un código de trabajo una vez que la aplicación se instala o cuando la intención recibida después de la aplicación se instaló como AndroidLost
- Cómo obtener el sabor del proyecto raíz en build.gradle de un proyecto secundario en caso de instalación de proyectos múltiples en android