2013-06-05 5 views
7

2つの別々のリストビューを持つナビゲーションドロワーを作成しようとしています。2つのリストビューをナビゲーションドロワーに追加すると、1つのみが表示されます

「mDrawerList」と呼ばれる最初のリストビューがよく表示されます。 - このリストには1つのアイテムしかありません。

は、第二のリストビューは、"mListProcheDeChezVous" が表示されることはありませんと呼ばれます。 - このリストビューには3つのアイテムがあります。

コメントを入れたとき、最初のリストビュー、2番目のフィールドが表示されないので、2番目のリストビューを作成するときに問題があると思いますが、どこがわからないのですか?ここで

は、ナビゲーション引き出しのレイアウトのためのコードです:

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

そして、ここでは私の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()); 

、あなたの助けをありがとう

BR

+0

博士awerLayoutは2つの子ビューしかサポートしていません。とにかく2つのListViewが必要なのはなぜですか? – Ahmad

答えて

4

作成すると、Navigation Drawer guideDrawerLayoutsには2人の子供しかいないはずです。最初のものはメインのコンテンツビューで、もう1つは引き出しビューです。

"content_frame"というIDを持つあなたのFrameLayoutは、メインコンテンツのビューとして解釈され、idが "dernieres_news"のListViewが引き出しレイアウトとして解釈されています。

したがって、第3のListViewは無視されます。

ドロワーの一部としてListViewの両方が必要な場合は、別のレイアウト(LinearLayoutなど)で囲む必要があります。

+2

ありがとうございます、あなたの説明ではっきりしています。私は線形レイアウトで2つのリストビューをグループ化しようとしましたが、アプリケーションが起動されたときにこのエラーが発生しました: 'アクティビティを開始できませんでしたComponentInfo {com.example.android.navigationdrawerexample/com.example.android.navigationdrawerexample.MainActivity}:java .lang.ClassCastException:android.widget.LinearLayout $ LayoutParamsをandroid.support.v4.widget.DrawerLayoutにキャストすることはできません.DoubleLayout $ LayoutParams' – wawanopoulos

+0

Hey wawanopoulos、私もあなたのように問題に会いました。これはGoogleの制限事項です。 1つはいくつかの解決策を与える? –

+0

ちょうどの場合誰かがupponを@wawanopoulosと私のような 'ClassCastException'につまずいてしまいます。少なくとも私の場合、openDrawer()、closeDrawer()などのために以前の単一ListViewを使用していたactivitiyの周囲のコードが理由でした – lupz

3

LinearLayoutのListViewをラップするのが最適です。私はちょうどこのようにして動作します。

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

、あなたは、このようなopenDrawer、closeDrawerとして使用する場合drawer_Linearlayoutを使用してください: はここに私のデモxmlです。 paramとしてisDrawerOpen

0

最初のリストビューが アンドロイドあり:layout_height = "match_parent" これは、それが全体drawerlayoutを占めることを意味する... 使用 アンドロイド:両方のリストビューでlayout_height = "wrap_content"

1

あなたはより多くを定義することができます1つのListView /任意のカスタムビューはのViewGroupの内側に追加しより:メイン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> 
関連する問題