代码非常简单。没什么好看的,我只想尝试覆盖一条消息,出于某种原因,这种行为在两种情况下是不同的。
案例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无法正常工作的原因。
任何建议都会有所帮助.. :)
答案 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
,它是对当前类的引用。