OnLongClickListener无法工作,因为它应该工作

时间:2014-02-17 17:30:37

标签: android view oncreate onlongclicklistener android-toast

代码非常简单。没什么好看的,我只想尝试覆盖一条消息,出于某种原因,这种行为在两种情况下是不同的。

案例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无法正常工作的原因。

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

3 个答案:

答案 0 :(得分:2)

您没有为onLongClick注册TextView听众。 在代码onCreate中添加以下行,它应该可以使用。

sometext.setOnLongClickListener(this);

答案 1 :(得分:1)

案例2缺少setOnLongClickListener的{​​{1}}。

sometext

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

在第二个类中,您的类实现了接口TextView sometext = (TextView) findViewById(R.id.click); sometext.setOnLongClickListener(this); // missing

答案 2 :(得分:1)

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

someText.setOnLongClickListener(this);

此行将侦听器对象附加到TextView对象。在第一种情况下,您调用setOnLongClickListener,这就是它起作用的原因。在这种情况下,您要在线创建新的onLongClickListener对象

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