带有静态和动态菜单项的导航抽屉

时间:2014-09-27 08:42:32

标签: android navigation-drawer

我是android新手并尝试使用this创建一个导航抽屉。

要显示左侧抽屉中的菜单项,我正在执行此操作

DrawerLayout  mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

List<DataItems> myTest = myDbAdapter.getValuesFromDb(); // method in DbAdapter class 
                                                       // to get records from db.

// Pass the data to ListView adapter
MyNavigationDrawerAdapter adapter = new MyNavigationDrawerAdapter(
   this, 
   R.layout.drawer_listview_item, 
   myTest);

// Set the adapter for the list view
mDrawerList.setAdapter(adapter);

它工作正常,但我想在Navigation抽屉中添加几个静态值,它们始终保持不变,在这些值之后我想显示从数据库中获取的值。

我几乎到处搜索,但找不到任何解决办法。

1 个答案:

答案 0 :(得分:0)

您正在使用的ArrayAdapter是一种从数组中创建不同字符串列表的简单方法。但它也仅限于这样做。根据您的需要,有不同的方式。我看到你有两个选择。更改数据库中的值并继续使用单个TextView。或者,如果您想要更高级的列表,则应创建一个扩展BaseAdapter的新类。并将适配器设置为此。

public class MyAdapter extends BaseAdapter{
    Context mCtx;
    List<DataItems> mData;

    public MyAdapter(Context context, List<DataItems> myTest) {
    mCtx = context;
    mData = myTest;
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ItemHolder holder;
        if (convertView == null) {
            convertView = new ItemHolder().getView();
        }
        holder = convertView.getTag();
        holder.update(mData.get(position).toString());
        return holder.getView();
    }

    private class ItemHolder {
        LinearLayout layout;
        TextView txt;

        public ItemHolder() {
            layout = View.inflate(mCtx, R.layout.item, null);
            txt = (TextView) layout.findViewById(R.id.text_name)
            layout.setTag(this);
        }

        public void update(String s) {
        txt.setText(s);
        }

        public LinearLayout getView() {
        return layout;
        }
    }

}

项目布局

<LinearLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal" >

     <TextView
          android:id="@+id/text_name"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content" />
</LinearLayout>

使用此代码,您只需要更改ItemHolder及其xml文件,使其看起来更像您想要的内容。 setTag()和getTag()用于重用视图并使其更有效。

请注意,Android L为此发布了新的小部件,但它尚不支持。 https://developer.android.com/preview/material/ui-widgets.html