Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Añadir 2 listview en el cajón de navegación, sólo uno funciona

Intento crear un cajón de la navegación con 2 listview separado dentro.

La primera lista llamada "mDrawerList" está bien visualizada. – Sólo hay un elemento en esta lista.

La segunda lista llamada "mListProcheDeChezVous" nunca se muestra. – Hay 3 elementos en esta lista.

Cuando pongo comentarios, el primer listview, el segundo no se muestra, por lo que creo que hay un problema cuando un crear el segundo listview .. pero no sé dónde?

Aquí está el código para el diseño del cajón de navegación:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <ListView android:id="@+id/dernieres_news" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="#E3E9E3" android:dividerHeight="1dp" android:background="#F3F3F4"/> <ListView android:id="@+id/pres_de_chez_vous" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="#E3E9E3" android:dividerHeight="1dp" android:background="#F3F3F4"/> </android.support.v4.widget.DrawerLayout> 

Y aquí hay un pedazo de código de mi clase MainActivity:

 public class MainActivity extends Activity { private DrawerLayout mDrawerLayout; private ListView mDrawerList, mListProcheDeChezVous; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mDrawerTitle; private CharSequence mTitle; private String[] mPlanetTitles; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTitle = mDrawerTitle = getTitle(); mPlanetTitles = getResources().getStringArray(R.array.planets_array); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); // Declaration of the 2 listview's mDrawerList = (ListView) findViewById(R.id.dernieres_news); mListProcheDeChezVous= (ListView) findViewById(R.id.pres_de_chez_vous); LayoutInflater inflater = getLayoutInflater(); // Add header news title ViewGroup header_news = (ViewGroup)inflater.inflate(R.layout.header_dernieres_news, mDrawerList, false); mDrawerList.addHeaderView(header_news, null, false); // Add header "proche de chez vous title" ViewGroup header_pres_de_chez_vous = (ViewGroup)inflater.inflate(R.layout.header_pres_de_chez_vous, mListProcheDeChezVous, false); mListProcheDeChezVous.addHeaderView(header_pres_de_chez_vous, null, false); // set a custom shadow that overlays the main content when the drawer opens mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); /* * FIRST ADAPTER FOR FIRST LISTVIEW */ String[] names=new String[]{"Dernières News"}; /*Array of Images*/ int[] image = new int[] {R.drawable.ic_action_feed}; List<HashMap<String, String>> listinfo = new ArrayList<HashMap<String, String>>(); listinfo.clear(); for(int i=0;i<1;i++){ HashMap<String, String> hm = new HashMap<String, String>(); hm.put("name", names[i]); hm.put("image", Integer.toString(image[i])); listinfo.add(hm); } // Keys used in Hashmap String[] from = { "image", "name" }; int[] to = { R.id.img, R.id.txt }; SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), listinfo, R.layout.drawer_list_item, from, to); mDrawerList.setAdapter(adapter); /* * SECOND ADAPTER FOR SECOND LISTVIEW */ String[] names_pres_de_chez_vous = new String[]{"Finistère", "Morbihan", "Côtes d'Armor"}; /*Array of Images*/ int[] image_pres_de_chez_vous = new int[] {R.drawable.ic_action_gear, R.drawable.ic_action_gear, R.drawable.ic_action_gear}; List<HashMap<String, String>> listinfo_pres_de_chez_vous = new ArrayList<HashMap<String, String>>(); listinfo_pres_de_chez_vous.clear(); for(int i=0;i<3;i++){ HashMap<String, String> hm_pres_de_chez_vous = new HashMap<String, String>(); hm_pres_de_chez_vous.put("name", names_pres_de_chez_vous[i]); hm_pres_de_chez_vous.put("image", Integer.toString(image_pres_de_chez_vous[i])); listinfo_pres_de_chez_vous.add(hm_pres_de_chez_vous); } // Keys used in Hashmap String[] from_pres_de_chez_vous = { "image", "name" }; int[] to_pres_de_chez_vous = { R.id.img, R.id.txt }; SimpleAdapter adapter_pres_de_chez_vous = new SimpleAdapter(getBaseContext(), listinfo_pres_de_chez_vous, R.layout.drawer_list_item_pres_de_chez_vous, from_pres_de_chez_vous, to_pres_de_chez_vous); mListProcheDeChezVous.setAdapter(adapter_pres_de_chez_vous); mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); mListProcheDeChezVous.setOnItemClickListener(new DrawerItemClickListener()); 

Gracias por tu ayuda,

BR

  • Alternar el cajón de navegación a través del título de la barra de acciones
  • No se puede bloquear el evento de clic de botón de inicio de la barra de herramientas
  • Esperando que el Cajón de Navegación se cierre antes de inicializar Fragmentos con el lazo vacío while
  • Animación ActionBarDrawerToggle
  • La mejor manera de implementar un cajón de desplazamiento de navegación
  • Colorear la barra de estado de Android en Nav Drawer
  • Actualizar el estado seleccionado del cajón de navegación después de volver a pulsar
  • Android: ¿Es mejor crear un nuevo fragmento cada vez que se hace clic en un elemento del cajón de navegación o cargar fragmentos creados anteriormente?
  • 4 Solutions collect form web for “Añadir 2 listview en el cajón de navegación, sólo uno funciona”

    Según la guía Creación de un cajón de navegación , DrawerLayouts sólo debe tener dos hijos. La primera es la vista principal del contenido, y la segunda es la vista del cajón.

    Su FrameLayout con un id de "frame_contenido" se interpreta como la vista con el contenido principal, y su ListView con un id de "dernieres_news" se interpreta como el diseño del cajón.

    El tercer ListView es así ignorado.

    Si necesita ambos ListView como parte del cajón, debe envolverlos en otro diseño, como un LinearLayout .

    Envolver el ListView en LinearLayout es una gran solución. Acabo de hacer de esta manera y funciona. Aquí está mi demo xml:

     <LinearLayout android:id="@+id/drawer_Linearlayout" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:orientation="vertical" > <Button android:id="@+id/btn_clear" android:layout_width="240dp" android:layout_height="wrap_content" android:text="ABC"/> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="wrap_content" android:layout_gravity="start" android:background="#111" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" /> </LinearLayout> 

    Y asegúrese de usar drawer_Linearlayout cuando se utiliza como openDrawer, closeDrawer. IsDrawerOpen como el param.

    Puede definir más de un ListView / cualquier vista personalizada agregar dentro de un ViewGroup:

    Código para la actividad principal de DrawerLayout XML:

     <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawerlayout" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- This is the fragment Layout --> <FrameLayout android:id="@+id/fragmnetlayout" android:layout_width="match_parent" android:layout_height="match_parent" > </FrameLayout> <!-- this LinearLayout as a Drawerlayout inside it create two ListView With Its Items Title --> <LinearLayout android:id="@+id/lldrawercontent" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:orientation="vertical" > <TextView android:id="@+id/tvsocialsites" android:layout_width="match_parent" android:layout_height="30dp" android:background="#12ccad" android:gravity="center" android:text="@string/socialsites" android:textSize="15sp" /> <ListView android:id="@+id/drawerlistleft" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="#ffccee" android:choiceMode="singleChoice" android:divider="@null" /> <TextView android:id="@+id/tvweakdays" android:layout_width="match_parent" android:layout_height="30dp" android:background="#12ccad" android:gravity="center" android:text="@string/weaksdy" android:textSize="15sp" /> <ListView android:id="@+id/drawerlistweakdy" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="#32fbdc" android:choiceMode="singleChoice" > </ListView> </LinearLayout> </android.support.v4.widget.DrawerLayout> 

    El primer listview tiene android: layout_height = "match_parent" esto significa que ocupa todo el juego de cajones … use android: layout_height = "wrap_content" en ambas listas

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.