![](/img/trans.png)
[英]How to use setOnLongClickListener on menu item in navigation drawer in Android?
[英]Android - How to refresh the menu item of Navigation Drawer
首先,大多數代碼都來自這里 。
好的,因此有一個用於創建導航抽屜的活動代碼,“導航抽屜”菜單項包括一個imageview,一個文本和一個數字計數器。
現在,我想了解的是如何根據數據庫中的數據更改數字計數器。
所以這是代碼-
@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);
}
現在如何再次設置mDrawerList
的adapter
。
我知道onDrawerOpened
可能是一個不錯的選擇。
為此,我需要使用哪種代碼?
感謝您的任何幫助。
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()
同樣,如果“加載”部分異步發生在例如AsyncTaskLoader或AsyncTask中,則更好(如果您未正確處理配置更改,則更可取)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.