package com.pinecone.technology.mcommerce.learning.android.chapter10.menu;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.TextView;
public class SampleMenusActivity extends Activity {
//Initialize this in onCreateOptions
Menu myMenu = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//TextView tv = new TextView(this);
//tv.setText("Hello, Android. Say hello");
//setContentView(tv);
setContentView(R.layout.main);
//Before calling this method make sure
//set the content view
registerForContextMenu(this.getTextView());
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
//call the parent to attach any system level menus
super.onCreateOptionsMenu(menu);
this.myMenu = menu;
//add a few normal menus
addRegularMenuItems(menu);
//add a few secondary menus
add5SecondaryMenuItems(menu);
addSubMenu(menu);
//it must return true to show the menu
//if it is false menu won't show
return true;
}
private void addRegularMenuItems(Menu menu)
{
//Secondary items are shown just like everything else
int base=Menu.FIRST; // value is 1
MenuItem item1 = menu.add(base,base,base,"append");
menu.add(base,base+1,base+1,"XML Menus");
menu.add(base,base+2,base+2,"clear");
menu.add(base,base+3,base+3,"hide secondary");
menu.add(base,base+4,base+4,"show secondary");
menu.add(base,base+5,base+5,"enable secondary");
menu.add(base,base+6,base+6,"disable secondary");
menu.add(base,base+7,base+7,"check secondary");
MenuItem item8 = menu.add(base,base+8,base+8,"uncheck secondary");
//This will show the icon
//It might obscure the text
item1.setIcon(R.drawable.balloons);
//But this does not
item8.setIcon(R.drawable.balloons);
}
private void add5SecondaryMenuItems(Menu menu)
{
//Secondary items are shown just like everything else
int base=Menu.CATEGORY_SECONDARY;
menu.add(base,base+1,base+1,"sec. item 1");
menu.add(base,base+2,base+2,"sec. item 2");
menu.add(base,base+3,base+3,"sec. item 3");
menu.add(base,base+3,base+3,"sec. item 4");
menu.add(base,base+4,base+4,"sec. item 5");
}
private void addSubMenu(Menu menu)
{
//Secondary items are shown just like everything else
int base=Menu.FIRST + 100;
SubMenu sm = menu.addSubMenu(base,base+1,Menu.NONE,"submenu");
MenuItem item1 = sm.add(base,base+2,base+2,"sub item1");
sm.add(base,base+3,base+3, "sub item2");
sm.add(base,base+4,base+4, "sub item3");
//work the icons
//submenu item icons are not supported
item1.setIcon(R.drawable.icon48x48_2);
//the following is ok
sm.setIcon(R.drawable.icon48x48_1);
//This will result in an exception
//sm.addSubMenu("try this");
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if (item.getItemId() == 1)
{
appendText("\nhello");
}
else if (item.getItemId() == 2)
{
this.appendMenuItemText(item);
Intent intent = new Intent(this,XMLMenusActivity.class);
this.startActivity(intent);
}
else if (item.getItemId() == 3)
{
emptyText();
}
else if (item.getItemId() == 4)
{
//hide secondary
this.appendMenuItemText(item);
this.myMenu.setGroupVisible(Menu.CATEGORY_SECONDARY,false);
}
else if (item.getItemId() == 5)
{
//show secondary
this.appendMenuItemText(item);
this.myMenu.setGroupVisible(Menu.CATEGORY_SECONDARY,true);
}
else if (item.getItemId() == 6)
{
//enable secondary
this.appendMenuItemText(item);
this.myMenu.setGroupEnabled(Menu.CATEGORY_SECONDARY,true);
}
else if (item.getItemId() == 7)
{
//disable secondary
this.appendMenuItemText(item);
this.myMenu.setGroupEnabled(Menu.CATEGORY_SECONDARY,false);
}
else if (item.getItemId() == 8)
{
//check secondary
this.appendMenuItemText(item);
this.myMenu.setGroupCheckable(Menu.CATEGORY_SECONDARY,true,false);
}
else if (item.getItemId() == 9)
{
//uncheck secondary
this.appendMenuItemText(item);
this.myMenu.setGroupCheckable(Menu.CATEGORY_SECONDARY,false,false);
}
else
{
this.appendMenuItemText(item);
}
//should return true if the menu item
//is handled
return true;
//If it is not our menu item
//let the base class handle it
//return super.onOptionsItemSelected(item);
}
//Context menu support
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Sample menu");
menu.add(200, 200, 200, "item1");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
this.appendMenuItemText(item);
//menu item has been handled
return true;
}
//This method is here to demonstrate loading xml menu
//You can call this method from the oncreateoptions menu
//if you want to use the xml menu instead of programmatically
//creating the menus.
private void loadXMLMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater(); //from activity
inflater.inflate(R.menu.my_menu, menu);
}
private TextView getTextView()
{
TextView tv =
(TextView)this.findViewById(R.id.textViewId);
return tv;
}
public void appendText(String text)
{
TextView tv =
(TextView)this.findViewById(R.id.textViewId);
tv.setText(tv.getText() + text);
}
private void appendMenuItemText(MenuItem menuItem)
{
String title = menuItem.getTitle().toString();
TextView tv =
(TextView)this.findViewById(R.id.textViewId);
tv.setText(tv.getText() + "\n" + title + ":" + menuItem.getItemId());
}
private void emptyText()
{
TextView tv =
(TextView)this.findViewById(R.id.textViewId);
tv.setText("");
}
}//eof-class