我尝试创建一个抽屉导航,里面有 2 个单独的 ListView 。
名为"mDrawerList" 的第一个 ListView 显示良好。 - 此列表中只有一项。
名为 "mListProcheDeChezVous" 的第二个 ListView 从不显示。 - 此 ListView 中有 3 个项目。
当我发表评论时,第一个 listview,第二个没有显示,所以我认为创建第二个 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
最佳答案
根据创建 Navigation Drawer guide , DrawerLayouts
应该只有两个 child 。第一个是主内容 View ,第二个是抽屉 View 。
ID 为“content_frame”的 FrameLayout
被解释为包含主要内容的 View ,ID 为“dernieres_news”的 ListView
被解释为作为抽屉布局。
第三个 ListView
因此被忽略。
如果您需要将 ListView
作为抽屉的一部分,您应该将它们包装在另一个布局中,例如 LinearLayout
。
关于android - 在抽屉导航中添加 2 个 ListView ,只有一个有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16945534/