Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java onclick侦听器通过onlongclick侦听器激活_Java_Android_Onclicklistener_Onlongclicklistener - Fatal编程技术网

Java onclick侦听器通过onlongclick侦听器激活

Java onclick侦听器通过onlongclick侦听器激活,java,android,onclicklistener,onlongclicklistener,Java,Android,Onclicklistener,Onlongclicklistener,这是代码。当我长时间点击一个项目,并没有把手指拖离它时,菜单仍然会弹出,但它也会激活我的onClick监听器。我不知道为什么。我试着在网上寻找解决方案,但我只找到了让我检查退货声明的东西。我正在回归真实,所以我不知道还能做什么 listView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent

这是代码。当我长时间点击一个项目,并没有把手指拖离它时,菜单仍然会弹出,但它也会激活我的onClick监听器。我不知道为什么。我试着在网上寻找解决方案,但我只找到了让我检查退货声明的东西。我正在回归真实,所以我不知道还能做什么

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;
        }

    });

}

仔细看你的代码,数一数大括号,但请阅读我的评论

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

}

{start line}应该返回true

HAHA。非常感谢。我完全忽略了第二次返回。哇!尴尬谢谢你帮助我。这肯定解决了我的问题。