首先,大多数代码来自here。
好的,那么有一个创建导航抽屉的活动代码, 导航抽屉菜单项包括图像视图,文本和数字计数器。
现在,我试图理解的是如何根据数据库中的数据更改数字计数器。
所以这里是代码 -
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nav_activity_main);
mTitle = mDrawerTitle = getTitle();
// load slide menu items
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
// nav drawer icons from resources
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
navDrawerItems = new ArrayList<NavDrawerItem>();
dbHand = new DbHandler(this);
int numOfBotn = dbHand.queryAllBotnstonum();
String numBotn = String.valueOf(numOfBotn);
int numOfgROUPmSG = dbHand.newAllNewGroupMessages();
String numNewgRmsg = String.valueOf(numOfgROUPmSG);
lhand = new LocalStorageHandler(this);
int newprasoMsg = lhand.gotAllNewMsg();
String numNewPersonalMsg = String.valueOf(newprasoMsg);
// adding nav drawer items to array
// Home
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1), true, numNewPersonalMsg));
// Find People
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1), true , numNewgRmsg));
// Photos
navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1), true, numBotn));
// Communities, Will add a counter here
navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1)));
// Pages
navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
// What's hot, We will add a counter here
//navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), true, "50+"));
// Recycle the typed array
navMenuIcons.recycle();
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
// setting the nav drawer list adapter
adapter = new NavDrawerListAdapter(getApplicationContext(),
navDrawerItems);
mDrawerList.setAdapter(adapter);
// enabling action bar app icon and behaving it as toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setBackgroundDrawable(getResources().getDrawable(R.color.button_positive_off));
//getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, //nav menu toggle icon
R.string.app_name, // nav drawer open - description for accessibility
R.string.app_name // nav drawer close - description for accessibility
) {
public void onDrawerClosed(View view) {
Log.d("OUT", "CLOSED");
getActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
// on first time display view for first nav item
displayView(0);
}
现在,我如何再次为adapter
设置mDrawerList
。
我知道onDrawerOpened
可以成为一个好地方。
为了达到这个目的,我需要使用哪种代码?
感谢您提供任何帮助。
答案 0 :(得分:1)
Now how can i set again the adapter for the mDrawerList.
你不应该。相反,如果适配器的数据已更改,您可以简单地调用Adapter:notifyDatasetChanged()
I understand that onDrawerOpened can be a good place to do it.
不确定,因为它代表处于稳定状态的抽屉,即 - 用户可见。从这一刻起发生的任何变化都会显得奇怪或可能会降低用户体验,或两者兼而有之。不过,我想,为了简单起见,你可以试试。
更好的解决方案需要您实现自己的Loader和内容观察器,它将根据对基础数据源所做的更改来触发事件。如果你还不熟悉这些结构,这是一个挑战。
What kind of code am I need to use in order to that?
如果您打算使用数据库中的信息更新您的navdrawer,那么如果您的 NavDrawerListAdapter 将继承 CursorAdapter,那将会很不错。
如果您设法成功更改适配器代码以使用Cursor
代替/而不是硬编码元素,则其余任务就像:
查询数据库以获取信息。结果将是Cursor指向您的数据
将新光标设置为 NavDrawerListAdapter 并在此适配器上调用notifyDatasetChanged()
同样,如果“loading”部分异步发生,例如在AsyncTaskLoader中,或者在AsyncTask中发生(如果没有正确处理配置更改则不太可取),这样会更好。 / p>