2013-02-23 58 views
2

我的應用程序中有一個對話框,當對話框中的按鈕被點擊時,會顯示一個上下文菜單。但我的問題是onContextItemSelected沒有被調用。我的代碼在對話框外的其他按鈕中工作。onContextItemSelected在對話框中沒有被調用

這裏是我的代碼:

dialog = new Dialog(SuperPizzaActivity.this, R.style.DialogSlideAnim); 
dialog.setTitle("Select Size and Crust"); 
dialog.setContentView(R.layout.pizzadialog); 
final Button select = (Button) dialog.findViewById(R.id.superpizzadselect); 

select.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() { 

public void onCreateContextMenu(ContextMenu menu, View v, 
ContextMenuInfo menuInfo) { 
// TODO Auto-generated method stub 
menu.setHeaderTitle("Choose One"); 
menu.add(1, 1, 1, "Add Chicken"); 
menu.add(2, 2, 2, "Add Pasta"); 
menu.add(3, 3, 3, "Add Drinks"); 
menu.add(4, 4, 4, "Continue"); 
} 
}); 

select.setOnClickListener(new View.OnClickListener() { 

public void onClick(View v) { 
// TODO Auto-generated method stub 
openContextMenu(v); 
} 
}); 



    public boolean onContextItemSelected(MenuItem item) { 
      AdapterContextMenuInfo info = (AdapterContextMenuInfo) item 
      .getMenuInfo(); 

      switch (item.getItemId()) { 
      case 1: 
       dialog.dismiss(); 
       Intent i1 = new Intent(SuperPizzaActivity.this,SuperChickenActivity.class); 
       i1.putExtra(checker, checker); 
       startActivity(i1); 
       overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);   
       break; 

      case 2: 
       dialog.dismiss(); 
       Intent i = new Intent(SuperPizzaActivity.this,SuperPastaActivity.class); 
       i.putExtra(checker, checker); 
       startActivity(i); 
       overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
       break; 

      case 3: 
       dialog.dismiss(); 
       Intent i2 = new Intent(SuperPizzaActivity.this,SuperDrinksActivity.class); 
       i2.putExtra(checker, checker); 
       startActivity(i2); 
       overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
       break; 

      case 4: 
       dialog.dismiss(); 
       Intent i3 = new Intent(SuperPizzaActivity.this,SuperSummaryList.class); 
       startActivity(i3); 
       overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
       break; 

      } 
      return true; 
      } 

任何想法將不勝感激。

+0

看到這可能是有用的四個要求。 http://stackoverflow.com/questions/7976462/how-to-set-onitemclicklistener-in-a-dialog-listview – 2013-02-23 05:21:44

回答

0

只需按照以下步驟添加和創建菜單。

@Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     menu.setHeaderTitle("Choose One"); 
     menu.add(1, 1, 1, "Add Chicken"); 
     menu.add(2, 2, 2, "Add Pasta"); 
     menu.add(3, 3, 3, "Add Drinks"); 
     menu.add(4, 4, 4, "Continue"); 

     } 

您必須先註冊您的菜單:

@Override 
    public boolean onContextItemSelected(MenuItem item) { 

     //add image from camera 
     if(item.getItemId()==0) 
     { 
     Toast.makeText(MainActivity.this, "first", Toast.LENGTH_SHORT).show(); 
     } 
     //select image from list 
     else if(item.getItemId()==1) 
     { 
      Toast.makeText(MainActivity.this, "second", Toast.LENGTH_SHORT).show(); 
     } 
     else if(item.getItemId()==2) 
     { 
      Toast.makeText(MainActivity.this, "third", Toast.LENGTH_SHORT).show(); 
     } 
     else if(item.getItemId()==3) 
     { 
      Toast.makeText(MainActivity.this, "fourth", Toast.LENGTH_SHORT).show(); 
     } 
     else if(item.getItemId()==4) 
     { 
      Toast.makeText(MainActivity.this, "fifth", Toast.LENGTH_SHORT).show(); 
     } 


     return super.onContextItemSelected(item); 


    } 

更新時間:

對話框:

private void dialog() { 
     // custom dialog 
     final Dialog dialog = new Dialog(MainActivity.this,android.R.style.Theme_Translucent_NoTitleBar_Fullscreen); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setContentView(R.layout.temp); 
     getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
     // set the custom dialog components - text, image and button 
     Button btn = (Button) dialog.findViewById(R.id.btn_login); 
     btn.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      registerForContextMenu(v); //here opening menuitems 
       openContextMenu(v); 
      } 
     }); 

     dialog.show(); 
    } 

籲請單擊事件菜單:

btn.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        dialog(); // here dialog will open. 

       } 
      }); 

我只做了一個演示和它的作品。

+0

仍然無法正常工作。你在演示中使用過對話框嗎? – 2013-02-23 05:46:45

+0

@ user2031308檢查我更新了我的答案。 – RobinHood 2013-02-23 06:16:36

0

請致電

registerForContextMenu method 
在你的問題

我覺得

registerForContextMenu(select); 

我希望這將有助於

編輯

我用下面的代碼在我的應用程序它的工作原理成功

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.setup_home_list); 

    listview = (ListView)findViewById(R.id.lvHomeList); 
    listview.setOnItemClickListener(this); 
    registerForContextMenu(listview); 
    if (null == adapter) { 
     adapter = new HATAdapter(this); 
     listview.setAdapter(adapter); 
    } 
    adapter.notifyDataSetChanged(); 

    LoadHomeList(); 
} 


@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    AdapterView.AdapterContextMenuInfo info = (AdapterContextMenuInfo)menuInfo; 
    if(0 == info.position) 
     return; 
    menu.setHeaderTitle(adapter.getItem(info.position).getText()); 
    menu.add(Menu.NONE, HAT.HOME | HAT.ACTION_MODIFY, 0, "Modify"); 
    menu.add(Menu.NONE, HAT.HOME | HAT.ACTION_ERASE, 0, "Erase"); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 
    if(0 == info.position) 
     return false; 
    int nResponse = item.getItemId(); 
    String sStr = adapter.getItem(info.position).getText(); 
    doResponse(nResponse, sStr); 
    return true; 
} 
+0

我已經這樣做了。我在最終的Button select =(Button)dialog.findViewById(R.id.superpizzadselect);但它仍然無法正常工作 – 2013-02-23 05:24:59