我是android开发的初学者,并开发了一个简单的记事本应用程序,其中我有一个导航抽屉。一切都很好,我能看到导航抽屉,它工作正常。现在我不知道如何更新抽屉里的计数器值。导航抽屉显示注释的类别及其计数。
当删除或添加注释时,如何更新导航抽屉中的计数器值(注释保存在带有类别值的db中 - 因此我可以通过执行简单查询来获取计数)。我在互联网上彻底搜索过,但找不到任何例子。
任何帮助都将不胜感激。
答案 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();
}
}