【问题标题】:using both setOnItemClickListener and setOnItemLongClickListener both listener fired same time or works same time.Why同时使用 setOnItemClickListener 和 setOnItemLongClickListener 两个监听器同时触发或同时工作。为什么
【发布时间】:2013-06-06 14:08:45
【问题描述】:

ListView 中,我同时使用setOnItemClickListener()setOnItemLongClickListener()。当我单击一个项目时,它工作正常,但是当我长按一个项目时,有时两个侦听器会同时触发或同时工作。为什么?

/**
* on click of list view item show the run time webview.
*/
mListViewStar.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
        isHome = true;
        Animation translate1 = AnimationUtils.loadAnimation(Home.this,
                R.anim.tran_right);
        mRelativeLayout.setVisibility(View.GONE);
        mRelativeLayout.startAnimation(translate1);
        // mProgressBar.setVisibility(View.VISIBLE);
        mProgressDialog = ProgressDialog.show(Home.this, "",
                "Loading...");
        addWebView(mArrayListJBSelectedUrls.get(arg2)
            .getStrSelectedWebsiteUrl().toString(), arg2);
    }
});
/**
* on long press delete item from list view
*/
mListViewStar.setOnItemLongClickListener(new OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
        position = arg2;
        AlertDialog.Builder mAlert = new AlertDialog.Builder(Home.this);
        mAlert.setTitle(getString(R.string.alert));
        mAlert.setIcon(R.drawable.logo);
        mAlert.setMessage(getString(R.string.delete_item_dialog));
        mAlert.setPositiveButton(getString(R.string.yes),
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog,
                        int which) {
                    mDataBaseMethod.open();
                    Log.i("Delete", ""
                        + mArrayListJBSelectedUrls
                        .get(position)
                        .getStrSelectedUrlId());
                    mDataBaseMethod
                        .deleteWebSites(mArrayListJBSelectedUrls
                        .get(position)
                        .getStrSelectedUrlId()
                        .toString());
                    mArrayListJBSelectedUrls.remove(position);
                    starBaseAdapter.notifyDataSetChanged();
                    mDataBaseMethod.close();
                }
        });
        mAlert.setNegativeButton(getString(R.string.no),
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog,
                        int which) {
                    dialog.dismiss();
                }
        });
        AlertDialog alertDialog = mAlert.create();
        alertDialog.show();
        return true;
    }
});

【问题讨论】:

  • 这不应该发生,你能发布一些你的代码吗?如果一个事件被传递给 onItemLongClickListener 它不应该触发标准的 onItemClickListener。

标签: android android-layout android-intent


【解决方案1】:

在 onItemLongClick 上添加 return true

【讨论】:

  • 感谢 onItemLongClick 返回 true 然后 onItemClick 和 long 两个监听器没有一起工作......!!!
【解决方案2】:

setOnClickListener 首先按预期激活,当您希望同时执行两个操作时,问题就开始了,为避免这种情况,您需要 return true;在 OnItemLongClickListener 上。

lv_frag_three.setOnItemClickListener(new AdapterView.OnItemClickListener() {
      @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                //Groups clickedObj = (Groups) adapterView.getItemAtPosition(i);
                // your actions
            }
        });
});

  lv_frag_three.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                    @Override
                    public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                        return true;
                    }
                });

【讨论】:

    【解决方案3】:

    尝试修复

     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3)
    

    public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3)
    

    public void onItemClick(AdapterView<?> arg0,final View arg1,final int arg2,
              final long arg3)
    
    public boolean onItemLongClick(AdapterView<?> arg0,final View arg1,
                   final int arg2,final long arg3)
    

    【讨论】:

      【解决方案4】:

      您必须在函数 onItemLongClick 上返回 false

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-07
        • 2022-01-11
        • 1970-01-01
        • 2017-10-19
        • 1970-01-01
        • 2019-02-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多