Android导航抽屉:如何更新计数器值

时间:2014-02-24 10:36:02

标签: android

我是android开发的初学者,并开发了一个简单的记事本应用程序,其中我有一个导航抽屉。一切都很好,我能看到导航抽屉,它工作正常。现在我不知道如何更新抽屉里的计数器值。导航抽屉显示注释的类别及其计数。

当删除或添加注释时,如何更新导航抽屉中的计数器值(注释保存在带有类别值的db中 - 因此我可以通过执行简单查询来获取计数)。我在互联网上彻底搜索过,但找不到任何例子。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以在适配器类中添加额外的方法,例如loadData(),并在此方法中编写代码。只需从数据库中获取当前数据(笔记/垃圾编号)并将其设置为特定的导航抽屉项目,最后调用notifyDataSetChanged()刷新数据集。

public class NavDrawerListAdapter extends BaseAdapter {

    public NavDrawerListAdapter(Context context, ArrayList<NavDrawerItem> navDrawerItems)
    {
        this.context = context;
        this.navDrawerItems = navDrawerItems;
    }

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

    @Override
    public Object getItem(int position) {      
        return navDrawerItems.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        // Write your code

        return convertView;
    }

    public void loadData()
    {
        DatabaseHelper db = new DatabaseHelper(context);

        // Notes and trash counts
        int countNotes = db.getAllActiveNotes().size();
        int countTrash = db.getAllTrashNotes().size();

        String strCountNotes = String.valueOf(countNotes);
        String strCountTrash = String.valueOf(countTrash);

        // Set counter value to Navigation drawer items
        navDrawerItems.get(0).setCount(strCountNotes);
        navDrawerItems.get(1).setCount(strCountTrash);

        notifyDataSetChanged();
    }
}

最后,从方法loadData()中调用onDrawerOpened(),其中导航抽屉最有可能在您的主FragmentActivity课程中实施。因此,每次打开导航栏时,您都会在抽屉物品上看到更新的计数器值。

public void onDrawerOpened(View drawerView) {

    // Update notes and trash counter
    adapter.loadData();

    getActionBar().setTitle(mDrawerTitle);

    invalidateOptionsMenu();            
}

希望这会有所帮助〜

答案 1 :(得分:2)

Navigation Drawer从适配器获取项目(因为您有自定义项目,我假设您有自己的自定义适配器)。因此,一旦您对适配器所服务的数据执行任何操作,您只需将新数据推送到适配器并调用notifyDataSetChanged()

编辑此适配器的外观如下:

public class CustomAdapter extends BaseAdapter {

    private ArrayList<Object> data;

    @Override
    public int getCount() {
        //do stuff
    }

    @Override
    public Object getItem(int position) {
        //do stuff
    }

    @Override
    public long getItemId(int position) {
        //do stuff
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //do stuff
    }

    public void updateData(Cursor cursor){
        data = //fetch data from Cursor
        notifyDataSetChanged();
    }
}