2014-09-27 132 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