代码之家  ›  专栏  ›  技术社区  ›  app_maker

onclick监听器使用onlongclick监听器激活

  •  0
  • app_maker  · 技术社区  · 10 年前

    这是代码。当我长时间点击一个项目,并没有将手指从它上移开时,菜单仍然会弹出,但它也会激活我的onClick监听器。我不知道为什么。我尝试过在网上寻找解决方案,但我只找到了一些东西,让我检查退货声明。我正在返回True,所以我不知道该做什么。

    listView.setOnItemClickListener(new OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Toast.makeText(AddClaim.this, "Clicked "+list.get(position), Toast.LENGTH_SHORT).show();
                //adapter expenses
                setContentView(R.layout.add_expense);
                ListView expView = (ListView) findViewById(R.id.ExpenseListView);
                Collection<Expense> expenses = list.get(position).getExpenses();
                final ArrayList<Expense> expense = new ArrayList<Expense>(expenses);
                final ArrayAdapter<Expense> expAdap = new ArrayAdapter<Expense>(AddClaim.this, android.R.layout.simple_list_item_1, expense);
                expView.setAdapter(expAdap);
                }
    
        });
    
        //LONG CLICK FUNCTIONS
        listView.setOnItemLongClickListener(new OnItemLongClickListener(){
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                    int position, long id) {
                final int finalPosition = position;
                PopupMenu popup = new PopupMenu(AddClaim.this, view);
                popup.getMenuInflater().inflate(R.menu.add_claim, popup.getMenu());
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {  
                    public boolean onMenuItemClick(MenuItem item) {  
                    //DELETE button check.  
                      if (item.getTitle().equals("Delete")){
                        AlertDialog.Builder adb = new AlertDialog.Builder(AddClaim.this);
                        adb.setMessage("Delete "+ list.get(finalPosition).toString()+"?");
                        adb.setCancelable(true);
                        adb.setPositiveButton("Delete",new OnClickListener(){
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Claim claim = list.get(finalPosition);
                                ClaimListController.getClaimList().deleteClaim(claim);
                            }
                        });
                        adb.setNegativeButton("Cancel",new OnClickListener(){
    
                            @Override
                            public void onClick(DialogInterface dialog, int which) {                        
                            }
    
                        });
                        adb.show();
                      }//end of delete button check
                      //START of ADD EXPENSE check
                      if (item.getTitle().equals("Add Expense")){
                          Intent intent = new Intent(AddClaim.this, ExpenseAdd.class);
                          intent.putExtra("somename", finalPosition);
                          startActivity(intent);
    
                              }
                      //end of add expense check
                      return true;  
                     }  
                    });  
                popup.show();
            return false;
            }
    
        });
    
    }
    
    1 回复  |  直到 10 年前
        1
  •  0
  •   Elltz    10 年前

    仔细查看代码,然后 数数你的牙套 但请阅读我的评论

    listView.setOnItemLongClickListener(new OnItemLongClickListener(){ //function starts here
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                int position, long id) { // longclick starts here
            final int finalPosition = position;
            PopupMenu popup = new PopupMenu(AddClaim.this, view); // your menu code starts here
            popup.getMenuInflater().inflate(R.menu.add_claim, popup.getMenu());
            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {  
                public boolean onMenuItemClick(MenuItem item) {  
                //DELETE button check.  
                  if (item.getTitle().equals("Delete")){
                    AlertDialog.Builder adb = new AlertDialog.Builder(AddClaim.this);
                    adb.setMessage("Delete "+ list.get(finalPosition).toString()+"?");
                    adb.setCancelable(true);
                    adb.setPositiveButton("Delete",new OnClickListener(){
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Claim claim = list.get(finalPosition);
                            ClaimListController.getClaimList().deleteClaim(claim);
                        }
                    });
                    adb.setNegativeButton("Cancel",new OnClickListener(){
    
                        @Override
                        public void onClick(DialogInterface dialog, int which) {                        
                        }
    
                    });
                    adb.show();
                  }//end of delete button check
                  //START of ADD EXPENSE check
                  if (item.getTitle().equals("Add Expense")){
                      Intent intent = new Intent(AddClaim.this, ExpenseAdd.class);
                      intent.putExtra("somename", finalPosition);
                      startActivity(intent);
    
                          }
                  //end of add expense check
                  return true;  // you only return true if onmenu item is clicked.. which is too late
                 }  
                });  
            popup.show();  // and your menu code ends here, because this is where it is shown..
        return false; // you are returning false.. this is {star line}
        } //longclick ends here 
    
     }); //function ends here
    
    }
    

    {开始行}应该 return true