2013-06-05 14 views
7

Próbuję utworzyć szufladę nawigacji z 2 osobnymi widokami list wewnątrz.Dodaj 2 listy widoków w szufladzie nawigacji, tylko jedna działa

Pierwszy widok listy o nazwie "mDrawerList" jest dobrze wyświetlany. - Na liście znajduje się tylko jedna pozycja.

Drugi ListView nazywa "mListProcheDeChezVous"nigdy nie jest wyświetlany. - W tym widoku listy znajdują się 3 pozycje.

Kiedy umieszczam w komentarzach, pierwszy listview, drugi nie jest wyświetlany, więc myślę, że jest problem, gdy tworzymy drugi listview .. ale nie wiem gdzie?

Oto kod na układ nawigacji szuflady:

<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> 

A oto fragment kodu z mojej klasy główną działalność:

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()); 

dziękuję za pomoc,

BR

+0

Dr awerLayout obsługuje tylko dwa widoki podrzędne. Dlaczego mimo wszystko potrzebujesz dwóch listView? – Ahmad

Odpowiedz

4

Jak na tworzenie Navigation Drawer guide, DrawerLayouts powinien mieć tylko dwoje dzieci. Pierwszy to główny widok treści, a drugi to widok szuflady.

Twój o identyfikatorze "content_frame" jest interpretowany jako widok z główną treścią, a Twój ListView z identyfikatorem "dernieres_news" jest interpretowany jako układ szuflady.

Trzeci ListView jest zatem ignorowany.

Jeśli potrzebujesz części ListView jako części szuflady, powinieneś zawinąć je w innym układzie, takim jak LinearLayout.

+2

Dzięki, jasne jest z twoim wyjaśnieniem.Próbowałem zgrupować 2 listy odsłon w układzie liniowym, ale mam ten błąd podczas uruchamiania aplikacji: 'Nie można rozpocząć działania ComponentInfo {com.example.android.navigationdrawerexample/com.example.android.navigationdrawerexample.MainActivity}: java .lang.ClassCastException: android.widget.LinearLayout $ LayoutParams nie można przesyłać do android.support.v4.widget.DrawerLayout $ LayoutParams' – wawanopoulos

+0

Hej, wawanopoulos, również spotkałem się z problemem tak samo jak twoje. Może to restrykcja Google, może jeden daje jakieś rozwiązanie? –

+0

Na wszelki wypadek Ktoś potyka się o "Wyjątek ClassCastException", taki jak @wawanopoulos i ja. Przynajmniej w moim przypadku powodem był otaczający kod działania, który nadal wykorzystywał poprzedni pojedynczy ListView dla openDrawer(), closeDrawer(), itp. – lupz

3

Owiń ListView w LinearLayout to świetne rozwiązanie. Po prostu tak zrobiłem i to działa. Oto moje 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> 

i należy użyć drawer_Linearlayout podczas korzystania z takich jak openDrawer, closeDrawer. isDrawerOpen jako parametr.

0

pierwszym ListView został android: layout_height = "match_parent" oznacza to, że zajmują całą drawerlayout ... użycie android: layout_height = "wrap_content" w obu listviews

1

Można określić więcej niż jednego ListView/dowolny niestandardowy widok dodać wewnątrz ViewGroup:

Kod Główna działalność 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> 
Powiązane problemy