通过View.OnClickListener()传递MainActivity的对象

时间:2016-12-31 20:36:33

标签: java android parameter-passing onclicklistener

以下是我的应用的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");
    }
}

}

1 个答案:

答案 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。

相关问题