Intereting Posts
Android: использование LinkMovementMethod для редактирования текста Управление жизненным циклом Android фрагментов в ViewPager и FragmentPagerAdapter Я застал установку Crashlytics для Android с помощью Eclipse : App: dexDebug ExecException завершен с ненулевым значением выхода 2 Устройства «Visual Studio Emulator для Android» не указаны в Android Device Monitor Как получить IMEI / ESN устройства программно в android? Каков переход по умолчанию между действиями в Android 4.0 (API 14+) Проблема с хранением данных в Android Android listview ленивая загрузка Как настроить автоматический прирост первичного ключа в андроиде realm Значение AudioSource для USB-микрофона на Android Как прокручивать в нижней части списка ListView программно? Побочные эффекты изменения фильтра и требования к существующему приложению в Android Play / Market Рисование 9-патча на холсте с помощью drawBitmap Есть ли способ получить уведомление, когда пользователь отключает устройство?

Добавить 2 listview в навигационном ящике, только один работает

Я пытаюсь создать навигационный ящик с 2 отдельными списками внутри.

Хорошо отображен первый список, называемый «mDrawerList» . – В этом списке есть только один элемент.

Второй список, называемый «mListProcheDeChezVous» , никогда не отображается. – В этом списке есть 3 объекта.

Когда я помещаю комментарии, первое listview, второе не отображается, поэтому я думаю, что есть проблема при создании второго списка. Но я не знаю, где?

Вот код для макета навигационного ящика:

<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

Solutions Collecting From Web of "Добавить 2 listview в навигационном ящике, только один работает"

В соответствии с руководством по созданию навигационного ящика DrawerLayouts должен иметь только двух детей. Первый – это основной вид содержимого, а второй – вид ящика.

Ваш FrameLayout с идентификатором «content_frame» интерпретируется как представление с основным контентом, а ваш ListView с идентификатором «dernieres_news» интерпретируется как макет ящика.

Третий ListView игнорируется.

Если вам нужен как ListView как часть ящика, вы должны обернуть их в другой макет, например LinearLayout .

Обтекание ListView в LinearLayout – отличное решение. Я просто так делал, и это работает. Вот мой 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> 

И обязательно используйте drawer_Linearlayout, когда вы используете, например openDrawer, closeDrawer. IsDrawerOpen как параметр.

Вы можете определить более одного списка 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> 

В первом списке есть android: layout_height = "match_parent" это означает, что он занимает весь drawerlayout … использовать android: layout_height = "wrap_content" в обоих списках