更新:我认为问题可能是ListView
开始过高,因此列表视图的第一个元素存在但未显示在屏幕上。我知道第一个元素存在,但它没有显示。我一直在试验RecyclerView
,我遇到了类似的问题:RecyclerView
的第一个元素开始太高,其中一半被切断了。有谁知道为什么会发生这种情况?
我制作的导航抽屉与Google developer页面上的导航抽屉大致类似。问题是抽屉不会显示我正在使用的数组的0元素 - 它只显示元素1和2。
请参阅下面的相关代码。我正在运行Android 5.0.1并且万一重要,我的主题是Material.Light.DarkActionBar
。
我不确定为什么这不起作用。谢谢!
MainActivity
:
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
private ListView mDrawerList;
@Override
public void onCreate(Bundle savedInstanceState)
{
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
mDrawerToggle = new ActionBarDrawerToggle(
this,
mDrawerLayout,
R.string.drawer_open,
R.string.drawer_close)
{
public void onDrawerClosed(View view) {...}
public void onDrawerOpened(View drawerView) {...}
};
}
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerList = (ListView) findViewById(R.id.leftDrawer);
//NavDrawerItem is just a simple class with only a constructor to assign the int and String
NavDrawerItem [] navDrawerItems = new NavDrawerItem[3];
//NAVIGATION DRAWER ONLY SHOWS "ARCHIVE" AND "GALLERY"
navDrawerItems[0] = new NavDrawerItem(R.drawable.ic_menu_home, "Home");
navDrawerItems[1] = new NavDrawerItem(R.drawable.ic_menu_archive, "Archive");
navDrawerItems[2] = new NavDrawerItem(android.R.drawable.ic_menu_gallery, "Gallery");
mDrawerList.setAdapter(new NavDrawerAdapter(this, R.layout.drawer_list_item, navDrawerItems));
NavDrawerAdapter extends ArrayAdapter<NavDrawerItem>
:
private final Context context;
private final int layoutResourceId;
private NavDrawerItem data[] = null;
public NavDrawerAdapter(Context context, int layoutResourceId, NavDrawerItem [] data)
{
super(context, layoutResourceId, data);
this.context = context;
this.layoutResourceId = layoutResourceId;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
View v = inflater.inflate(layoutResourceId, parent, false);
ImageView imageView = (ImageView) v.findViewById(R.id.navDrawerImageView);
TextView textView = (TextView) v.findViewById(R.id.navDrawerTextView);
NavDrawerItem choice = data[position];
imageView.setImageResource(choice.icon);
textView.setText(choice.name);
return v;
}
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">
<RelativeLayout
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
<ListView android:id="@+id/leftDrawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#eeeeee"/>
</android.support.v4.widget.DrawerLayout>
drawer_list_item.xml
:
<RelativeLayout
...>
<ImageView
...>
<TextView
...>
</RelativeLayout>