具有静态和动态菜单项的导航抽屉
问题描述:
我是新来的机器人,并尝试使用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);
它工作正常,但我想补充几个静态值的抽屉式导航始终保持不变,这些值后我想显示从数据库中取得的价值。
我已经搜索了几乎无处不在,但无法找到任何解决方案。
答
您正在使用的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
手动项添加到列表 MYTEST –
2014-09-27 08:44:10
您名单后'的意思是 MYTEST = myDbAdapter.getValuesFromDb();' 我可以手动做这个项目添加: 'myTest.add(...); //但这需要DataItems' –
2014-09-27 08:56:10
那么问题是什么?你没有DataItems.java?创建对象并为其添加值。 – 2014-09-28 03:14:14