【发布时间】:2017-05-15 15:48:43
【问题描述】:
以下是我的应用程序 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");
}
}
}
【问题讨论】:
-
如果你想让你当前的活动处理点击你只需传递
this,传递新的活动实例对你没有好处,你应该让操作系统为你创建活动,而不是自己产生它们 -
@OlegBogdanov 这就是我正在做的,但实际上无法弄清楚是什么导致了这里的问题。
-
但你忘了说是什么问题
标签: java android parameter-passing onclicklistener