推荐一个up主分享的Anroid学习的视频,感谢up主的知识分享。
https://www.bilibili.com/video/BV1Rt411e76H?t=334&p=8
在跟随大佬的学习过程中,大佬将重复的代码整合封装的过程中我不禁产生了下面的疑惑
public void onClick(View view)中的view参数是谁?哪来的?
public class MainActivity extends AppCompatActivity { private Button mBtn1,mBtn2,mBtn3,mBtn4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtn1 = findViewById(R.id.btn_1);//最新版本的Android studio采用了泛化省去了类型转换 mBtn2 = findViewById(R.id.btn_2); mBtn3 = findViewById(R.id.btn_3); mBtn4 = findViewById(R.id.btn_4); setListener(); } private void setListener(){ OnClick onClick=new OnClick(); mBtn1.setOnClickListener(onClick); mBtn2.setOnClickListener(onClick); mBtn3.setOnClickListener(onClick); mBtn4.setOnClickListener(onClick); } private class OnClick implements View.OnClickListener { @Override public void onClick(View view) { Intent intent=null; switch (view.getId()){//这个view哪里来的? case R.id.btn_1: intent=new Intent(MainActivity.this,MainActivityTest1.class); break; case R.id.btn_2: intent=new Intent(MainActivity.this,MainActivityTest1.class); break; case R.id.btn_3: intent=new Intent(MainActivity.this,MainActivityTest1.class); break; case R.id.btn_4: intent=new Intent(MainActivity.this,MainActivityTest1.class); break; } startActivity(intent); } } }我找到setOnClickListener()方法,发现其位于View类下,发现其就抛了个异常出来???
public void setOnClickListener(@Nullable View.OnClickListener l) { throw new RuntimeException("Stub!"); }再看View.OnClickListener接口,其onClick(View var1)方法明显需要传一个View 类型的参数过来,问题是哪来的呢?
public interface OnClickListener { void onClick(View var1); }
查了一下Android 的API,找到的结果如下,这意思是谁被点击了,参数view就是谁,可以理解为参数绑定,至于怎么绑定的就不会知道了,上面也没说,暂时就不深究了。
Parameters//参数v指的是那个被点击的view
vThe view that was clicked.