我尝试在里面创建一个带有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
答案 0 :(得分:4)
根据创建Navigation Drawer guide,DrawerLayouts
应该只有两个孩子。第一个是主要内容视图,第二个是抽屉视图。
ID为“content_frame”的FrameLayout
被解释为包含主要内容的视图,而ID为“dernieres_news”的ListView
被解释为抽屉布局。< / p>
因此忽略了第三个ListView
。
如果您需要ListView
作为抽屉的一部分,则应将它们换成另一种布局,例如LinearLayout
。
答案 1 :(得分:3)
在LinearLayout中包装ListView是一个很好的解决方案。我只是这样做,它的工作原理。 这是我的演示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>
并确保在使用openDrawer,closeDrawer时使用drawer_Linearlayout。 isDrawerOpen作为参数。
答案 2 :(得分:1)
您可以在ViewGroup中定义多个ListView /任何自定义视图添加:
主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>
答案 3 :(得分:0)
第一个listview了 机器人:layout_height = “match_parent” 这意味着它占据了整个抽屉布局...... 使用 机器人:layout_height = “WRAP_CONTENT” 在两个列表视图中