【问题标题】:OnLongClickListener is not working as it's supposed to workOnLongClickListener 无法正常工作
【发布时间】:2014-02-17 17:30:37
【问题描述】:

代码非常简单。没什么好说的,我只是想祝酒,但由于某种原因,两种情况下的行为不同。

案例 1:这是有效的:

代码如下:

 @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.webopen);


            TextView sometext = (TextView)findViewById(R.id.click);
            sometext.setOnLongClickListener(new OnLongClickListener() {

                @Override
                public boolean onLongClick(View v) {
                    Toast.makeText(getApplicationContext(), "Long click Working", Toast.LENGTH_LONG).show();
                    return false;
                }
            });


            }

案例 2:不工作!我想知道它不起作用的原因

public class OnClick extends Activity implements OnLongClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webopen);

        TextView sometext = (TextView) findViewById(R.id.click);

    }

    @Override
    public boolean onLongClick(View v) {

        switch (v.getId()) {
        case R.id.click:
            Toast.makeText(getApplicationContext(), "Long click enabled",
                    Toast.LENGTH_LONG).show();
            // OR
            // Something();
            break;

        default:
            break;
        }

        return false;
    }

    public boolean Something() {

        Toast.makeText(getApplicationContext(), "Long click enabled",
                Toast.LENGTH_LONG).show();
        return true;
    }
}

代码没有什么了不起的,但我只想知道 onLongClickListener 不起作用的原因。

任何建议都会有所帮助..:)

【问题讨论】:

  • 你想念 someText.setOnLongClickListener(this);
  • 谢谢..得到它的工作。

标签: android view oncreate onlongclicklistener android-toast


【解决方案1】:

您没有为someText 设置onLongClickListener。你需要添加这个:

someText.setOnLongClickListener(this);

这一行将监听器对象附加到TextView 对象。在第一种情况下,您调用setOnLongClickListener,这就是它起作用的原因。在这种情况下,您正在创建一个新的onLongClickListener 对象in-line

在第二个示例中,您的 Activity 继承了 OnLongClickListener,这使其成为该对象的实例。所以要为someText设置监听器,传递监听器this,它是对当前类的引用。

【讨论】:

  • 谢谢.. 我完全忘记了将 onLongClickListener 注册到我的文本视图.. 我改变了我的答案。
【解决方案2】:

您没有为TextView 注册onLongClick 侦听器。 在您的代码中添加以下行onCreate,它应该可以工作。

sometext.setOnLongClickListener(this);

【讨论】:

    【解决方案3】:

    案例 2 缺少 setOnLongClickListener for sometext

    TextView sometext = (TextView) findViewById(R.id.click);  
    sometext.setOnLongClickListener(this); // missing
    

    在第一种情况下,您使用了匿名内部类。

    第二个你的类实现了接口OnLongClickListener

    【讨论】:

    猜你喜欢
    • 2016-12-01
    • 2013-06-21
    • 1970-01-01
    • 2016-09-01
    • 2012-07-11
    • 2018-04-08
    • 2017-04-20
    • 2018-10-02
    • 2016-09-04
    相关资源
    最近更新 更多