2

如果我添加了自定義項,以我的NavigationView菜單,就像這樣:集數據NavigationView菜單項

Menu menu = navigationView.getMenu(); 

MenuItem item = menu.add("Item 1"); 

如何設置數據的項目(如一個對象),這樣,當它的點擊/選中,我可以將這些數據傳遞給它打開的活動?

回答

1

您無法設置/添加數據到菜單項。通過查看add()方法的documentation,就可以看出,您可以設置:

的groupId - INT:組標識符,這個項目應該成爲其中的一部分。這可以用來定義批量狀態更改的項目組。如果一個項目不應該在一個組中,通常使用NONE。

itemId - int:唯一的項目ID。如果您不需要唯一的ID,請使用NONE。

訂單 - int:項目的訂單。如果您不關心訂單,請使用NONE。請參閱getOrder()。

標題 - CharSequence:要顯示的項目文本。

因此:

您需要設置itemId和處理特定的任務中onNavigationItemSelected()

@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 

    int id = item.getItemId(); 

    if (id == R.id.id_of_menu_item_1) { 

     // handle intents and passing data 

    } else if (id == R.id.id_of_menu_item_2) { 

     // handle intents and passing data 

    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 
+1

是的,但我怎麼設置**菜單項**上的數據,然後我可以傳遞給點擊活動?例如,我怎樣才能在物品上設置一個'用戶'對象,然後當這個物品被選中時,讓它發送到活動?在你的例子中,我只能在選擇項目時傳遞數據。我需要的是能夠將數據附加到項目上,然後在選定時獲取該數據並將其傳遞給活動。 – user7556225

+0

除了id以外,您不會將任何類型的數據設置爲菜單項。他們只能被點擊。當它發生時,他們調用'onNavigationItemSelected()'方法。現在,您可以通過讀取ID來識別哪個菜單項被點擊並處理必要的任務。例如,創建'intent'並傳遞數據,或者執行其他任何你想要的任務 – Marat

+0

如果我的許多菜單項打開相同的活動,但需要傳遞不同的數據(本例中爲對象)會怎麼樣? – user7556225

0

這是沒有意義的我。 MenuItem類只保存與菜單項相關的屬性。你不能在MenuItem實例中放置其他對象。看看關於MenuItem類:

MenuItem class

您可以使用存儲庫模式來獲得當前活動的新的活動或負載對象所需的數據和使用意圖傳遞給新的活動,只需創建一個Bundle,把你的序列化或可上載的對象。當你處理時,你可以做到這一點onNavigationItemSelected(MenuItem item)

相關問題