代码很简单..太好了,我只是尝试举起一条消息,由于某种原因,两种情况下的行为是不同的。

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

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

最佳答案

您没有为onLongClickListener设置someText。您需要添加以下内容:

someText.setOnLongClickListener(this);


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

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

09-27 17:05