簡體   English   中英

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);
    }

現在如何再次設置mDrawerListadapter

我知道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而不是硬編碼元素,或者與硬編碼元素一起使用,那么剩下的任務就很簡單:

  1. 在數據庫中查詢信息。 結果將是一個游標指向您的數據

  2. 將新的Cursor設置為NavDrawerListAdapter,然后在此適配器上調用notifyDatasetChanged()

同樣,如果“加載”部分異步發生在例如AsyncTaskLoader或AsyncTask中,則更好(如果您未正確處理配置更改,則更可取)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM