2011-01-08 10 views
0

ボタンクリック時にメニューを表示する必要がありますが、メニューを表示できません。私のコードは以下の通りです。誰かが私のコードで何が間違っているか教えてもらえますか?前もって感謝します !!!Androidの動的メニュー?

コード:あなたはスーパークラスのコンストラクタを呼び出していないonCreateContextMenu

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.ContextMenu; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.LinearLayout; 

public class DynamicMenu extends Activity { 
/** Called when the activity is first created. */ 
private Context context; 
Button btnMenu; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    context = this; 


    LinearLayout llay = new LinearLayout(context); 

    btnMenu = new Button(context); 
    btnMenu.setText("Show Menu"); 


    llay.addView(btnMenu); 

    setContentView(llay); 

    registerForContextMenu(btnMenu); 

} 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenu.ContextMenuInfo menuInfo) { 
    Menu m_menu = menu; 
    m_menu.add(0, 1, 0, "Settings"); 
    m_menu.add(0, 2, 0, "About"); 
    m_menu.add(0, 3, 0, "Exit"); 
} 

} 
+0

エラーメッセージが表示されますか? – clamp

答えて

6

あなたが呼び出したいんようhttp://developer.android.com/guide/topics/ui/menus.html

何かからそれを参照することができますか? MenuまたはContext Menuこれは2つの異なることです。

コーディングした内容によって、コンテキストメニューが表示されます。サンプルをHERES、(ロングコンテキストメニューを表示するボタンをクリックしてください):

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.ContextMenu; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.Toast; 

public class MenuDemo extends Activity { 
/** Called when the activity is first created. */ 
private Context context; 
Button btnMenu; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    context = this; 


    LinearLayout llay = new LinearLayout(context); 

    btnMenu = new Button(context); 
    btnMenu.setText("Show Menu"); 


    llay.addView(btnMenu); 

    setContentView(llay); 

    registerForContextMenu(btnMenu); 

} 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) {//Context Menu that appears when long clicked. 
    Menu m_menu = menu; 
    m_menu.add(Menu.NONE, Menu.FIRST+1, 0, "Settings"); 
    m_menu.add(Menu.NONE, Menu.FIRST+2, 0, "About"); 
    m_menu.add(Menu.NONE, Menu.FIRST+3, 0, "Exit"); 
} 

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    //Menu that appears when menu button is pressed on device 
    Menu m_menu = menu; 
    m_menu.add(Menu.NONE, Menu.FIRST+3, 0, "Settings"); 
    m_menu.add(Menu.NONE, Menu.FIRST+4, 0, "About"); 
    m_menu.add(Menu.NONE, Menu.FIRST+5, 0, "Exit"); 
    return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     String msg="Selected from menu: "; 
     switch (item.getItemId()){ 
     case Menu.FIRST+3: 
      Toast.makeText(this, msg+"Settings Menu", Toast.LENGTH_LONG).show(); 
      return true; 
     case Menu.FIRST+4: 
      Toast.makeText(this, msg+"About Menu", Toast.LENGTH_LONG).show(); 
      return true; 
     case Menu.FIRST+5: 
      Toast.makeText(this, msg+"Exit Menu", Toast.LENGTH_LONG).show(); 
      return true; 

     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 

     String msg="Selected from context menu: "; 
     switch (item.getItemId()){ 
     case Menu.FIRST+1: 
      Toast.makeText(this, msg+"Settings", Toast.LENGTH_LONG).show(); 
      return true; 
     case Menu.FIRST+2: 
      Toast.makeText(this, msg+"About", Toast.LENGTH_LONG).show(); 
      return true; 
     case Menu.FIRST+3: 
      Toast.makeText(this, msg+"Exit", Toast.LENGTH_LONG).show(); 
      return true; 

     } 

     return super.onContextItemSelected(item); 
    } 


} 

これは最高の練習ではなく、あなたが本当にここで多型を利用することができ、コードをお勧めします。しかし、これはあなたにアイデアを与えることを願っています。

+0

ありがとうShardul –

0

。あなたはこのsuper.onCreateContextMenu(menu, v, menuInfo);

+0

ありがとうPrateek Jain –

1

私はボタンクリック時にすべての

registerForContextMenu(btnMenu); 

    btnMenu.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      ((DynamicMenu) context).openContextMenu(btnMenu); 

     } 
    }); 

おかげでメニューを取得することができ、次のコードを使用します。

関連する問題