以下是我的应用的MainActivity.java示例:
/*imports and other stuffs*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myButton = (Button) findViewById(R.id.first_button);
// myButton.setOnClickListener(this); by using it, app works as desired.
myButton.setOnClickListener(new MainActivity()); //What's wrong with this piece of codes?
}
@Override
public void onClick(View v) {
if(v.getId()==R.id.first_button){
Toast.makeText(this, "Made it", Toast.LENGTH_SHORT).show();
}
}
由于setOnClickListener()方法需要一个实现View.setOnClickListener的类的对象,因此可以使用自定义类实现View.setOnClickListener,但我的问题是,作为初学者,实际上是在进行MainActivity的对象?
修改
但是如果我传递另一个类的对象并传递那个,那么代码就可以完美地运行,不是吗?那些代码怎么样:
public class MainActivity extends AppCompatActivity {
Button myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myButton = (Button) findViewById(R.id.first_button);
myButton.setOnClickListener(new MyClass());
}
class MyClass implements View.OnClickListener{
@Override
public void onClick(View v) {
Log.d("buttontest","Working Perfectly");
}
}
}
答案 0 :(得分:0)
myButton.setOnClickListener(new MainActivity());
使用这段代码,您在 myButton 上设置OnClickListener。但是,您没有创建正确的侦听器对象。您正在创建一个不正确类型的新MainActivity对象。
myButton.setOnClickListener(this);
这是正确的,因为该类实现了 View.OnClickListener ,并且在类中具有 void onClick(View v)方法的实现。
如果您也喜欢,也可以这样做:
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// add code here
}
});
这将创建一个新的OnClickListener对象,同时也实现了onClick方法。这是将匿名类传递给setOnClickListener。