2014-09-25 82 views
0

我试图显示listview的项目名称,当其popup菜单被点击,但我有麻烦,因为它总是显示或返回“false”值。任何想法如何解决这个问题?感谢listview Popupmenu显示错误值

public void toast(View v){ 
     showPopupMenu(v); 
    } 
    private void showPopupMenu(View v){ 
     PopupMenu pop = new PopupMenu(CompanyActivity.this, v); 
     pop.getMenuInflater().inflate(R.menu.menu,pop.getMenu()); 

     pop.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 

      @Override 
      public boolean onMenuItemClick(MenuItem item) { 
       if(item.getItemId() == R.id.view){ 
        Toast.makeText(getApplicationContext(),item.getItemId(),Toast.LENGTH_SHORT) 
          .show(); 

        return true; 
       } 

       return false; 
      } 
     }); 

     pop.show(); 
    } 

编辑:我想被点击的列表视图列表项的值,但它表明,被点击的菜单项。

public void toast(View v){ 
     showPopupMenu(v); 
    } 
    private void showPopupMenu(View v){ 
     PopupMenu pop = new PopupMenu(CompanyActivity.this, v); 
     pop.getMenuInflater().inflate(R.menu.menu,pop.getMenu()); 

     pop.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 

      @Override 
      public boolean onMenuItemClick(MenuItem item) { 
       Toast.makeText(CompanyActivity.this,"text: "+item.getTitle(),Toast.LENGTH_SHORT).show(); 

       return true; 
       } 
      }); 
     pop.show(); 
    } 
+0

为什么你这样做“item.getItemId()== R.id.view”? – BlaShadow 2014-09-25 20:58:37

+0

即时消息检查项目点击是否等于我的menu.xml中的项目,我做对了吗? – Jonathan 2014-09-25 21:00:16

+0

如果你创建一个上下文菜单,你可能做错了什么,但试着看看这个http://developer.android.com/guide/topics/ui/menus.html#context-menu – BlaShadow 2014-09-25 21:05:33

回答

0

ListView项的“名称”完全取决于您用于ListView的适配器。请记住,菜单项ID与列表视图ID无关,该ID与适配器项ID无关。为了让弹出菜单知道哪个项目被点击了,您需要使用列表项位置从适配器中查找它。它会这样工作:

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    showPopupMenu(view, position); 
} 
private void showPopupMenu(View anchor, final int position) { 
    PopupMenu popupMenu = new PopupMenu(
      this, 
      anchor); 
    popupMenu.inflate(R.menu.menu); 

    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 

     @Override 
     public boolean onMenuItemClick(MenuItem item) { 
      // Depending on what type of object backs your adapter, you may have 
      // to do something different here. 
      String title = String.valueOf(mListView.getAdapter().getItem(position)); 
      Toast.makeText(MyActivity.this, "text: " + title, Toast.LENGTH_SHORT).show(); 

      return true; 
     } 
    }); 
    popupMenu.show(); 
}