1.4种点击事件方式的优先级
内部类方式 = 匿名内部类 = 实现接口方式 > layout配置android:onclick自定义方法
//内部类方式
public class MainActivity extends AppCompatActivity {
private Button btn;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new Listener());
}
class Listener implements View.OnClickListener{
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"内部类方式",Toast.LENGTH_LONG).show();
}
}
}
//匿名内部类
public class MainActivity extends AppCompatActivity {
private Button btn;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"匿名内部类",Toast.LENGTH_LONG).show();
}
});
}
}
//实现接口方式
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(this);
}
public void onClick(View v) {
Toast.makeText(MainActivity.this,"实现接口方式",Toast.LENGTH_LONG).show();
}
}
//layout配置android:onclick自定义方法
//xml中设置属性android:onclick,配置自定义方法,比如btnClck
//android:onClick="tvOnclick"
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void btnClick(View v){
Toast.makeText(MainActivity.this,"layout配置自定义方法",Toast.LENGTH_LONG).show();
}
}
2.作用:Intent实现应用中交互和通信
两种Intent跳转,显式、隐式:
//显式跳转
//1.不带参跳转
bt.setOnClickListener(new View.OnClickListener(){
@override
public void onClick(View view){
startActivity(new Intent(MainActivity.this,YourActivity.class))
}
})
//2.带参跳转,详细能够传什么查阅api文档
bt.setOnClickListener(new View.OnClickListener(){
@override
public void onClick(View view){
Intent intent = new Intent();
intent.putExtra("yourExtraKeyForObj","yourExtraValueForObj");
intent.setClassName(MainActivity.this,"under.your.pack.with.Activity.YourActivity");
startActivity(intent);
}
})
//3.Bundle传递数据
bt.setOnClickListener(new View.OnClickListener(){
@override
public void onClick(View view){
Intent intent = new Intent(MainActivity.class,YourActivity.class);
Bundle bundle = new Bundle();
bundle.putString("yourKey","yourValue");
intent.putExtras(bundle);
startActivity(intent);
}
})
//隐式
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//设置的行为与AndroidManifest.xml需要启动的组件要一致
startActivity(new Intent().setAction("myIntent"));
}
});
}
}
//AndroidManifest.xml
<activity android:name=".intent.SecondActivity">
<intent-filter>
//为启动行为命名
<action android:name="myIntent"/>
//如果没有指定的category 也要设置该默认值,否则报错
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity android:name=".intent.FirstActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>