2014-09-27 111 views
0

我是新来的机器人,并尝试使用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); 

它工作正常,但我想补充几个静态值的抽屉式导航始终保持不变,这些值后我想显示从数据库中取得的价值。

我已经搜索了几乎无处不在,但无法找到任何解决方案。

+0

手动项添加到列表 MYTEST – 2014-09-27 08:44:10

+0

您名单后'的意思是 MYTEST = myDbAdapter.getValuesFromDb();' 我可以手动做这个项目添加: 'myTest.add(...); //但这需要DataItems' – 2014-09-27 08:56:10

+1

那么问题是什么?你没有DataItems.java?创建对象并为其添加值。 – 2014-09-28 03:14:14

回答

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