上一章总结是在看完后写的,感觉遗漏很多,从这章起是边阅读边总结。
在 onCreat()中添加。
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener(){ //注册监听器
public void onClick(View v){
Toast.makeText(MainActivity.this, "You clicked Button 1", Toast.LENGTH_SHORT).show();
}
});
通过findViewById()方法获得布局元素,返回的是View对象,(Button)转型成Button对象。
为按钮注册监听器。
Ps:在这里设置了自动导包
@+id/xxx 在 xml 定义一个id
@id/xxx 在 xml 引入一个id
res下创建menu文件夹,创建main,创建
<item
android:id="@+id/app_item"
android:title="Add"/>
<item
android:id="@+id/remove_item"
android:title="Remove"/>
在活动中添加onCreatetionsMenu(),使用getMenuInflater().inflate(R.menu.main,menu),第一个参数为创建菜单的资源文件,第二个参数为菜单项添加到的Menu对象。
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
定义菜单响应事件,在活动中重写onOptionsItemSelected(),通过调用item.getItemId() 来判断我们点击的是哪一个菜单项。
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case R.id.app_item:
Toast.makeText(this,"You clicked Add",Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
}
修改按钮监听器中的代码(我把之前的代码注释掉了):
button1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
//Toast.makeText(MainActivity.this, "You clicked Button 1", Toast.LENGTH_SHORT).show();
finish();
}
});
Ps:Intent是Android程序中各组件之间进行交互的一种重要方式。
创建第二个活动
修改第一个活动中按钮的点击事件(同样注释):
button1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
//Toast.makeText(MainActivity.this, "You clicked Button 1", Toast.LENGTH_SHORT).show();
//finish();
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
先构建Intent ,传入MainActivity.this 作为上下文,传入 SecondActivity.class 作为目标活动。
通过startActivity()方法执行Intent。
按下back键销毁当前活动,回到上一个活动。
在
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.example.androidtest.ACTION_START"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
修改MainActivity中按钮的点击事件
button1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
//Toast.makeText(MainActivity.this, "You clicked Button 1", Toast.LENGTH_SHORT).show();
//finish();
//Intent intent = new Intent(MainActivity.this,SecondActivity.class);
//startActivity(intent);
Intent intent = new Intent("com.example.androidtest.ACTION_START");
startActivity(intent);
}
});
android.intent.category.DEFAULT 是一种默认的 category ,在调用 startActivity 方法时会自动将这个category 添加到 Intent 中。
修改主活动为
button1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(Intent.ACTION_VIEW); //指定Intent的action为Intent.ACTION_VIEW,为安卓内置动作
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent); //通过Uri.parse()方法,将网址字符串解析成Uri对象,再调用setData()方法传递这个Uri对象。
setData()接受一个Uri对象,用于指定当前Intent正在操作的数据。
创建活动 ThirdActivity 与 third_layout
在 AndroidManifest.xml中注册
进行配置
<activity android:name=".ThirdActivity"
tools:ignore="AppLinkUrlError">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="http"/>
</intent-filter>
</activity>
tools:ignore="AppLinkUrlError" 通过提示增加!
修改主活动:
public void onClick(View v){
String data = "Hello SecondActivity";
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data); //接受两个参数,第一个是键
startActivity(intent);
}
修改 SecondActivity :
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
Intent intent = getIntent(); //获取用于启动SecondActivity的Intent
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity",data);
}
主活动中写入:
public void onClick(View v){
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent,1); //在活动销毁的时候返回一个结果给上一个活动。第二个参数是请求码,用于在之后的回调中判断数据的来源。
}
SecondActivity:
button2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){Intent intent = new Intent();
intent.putExtra("data_return","Hello 主活动");
setResult(RESULT_OK, intent); //重要!专门用于上一个活动返回数据。第一个参数用于向上一个活动返回处理结果,一般只用RESULT_OK 或 RESULT_CANCELED这两个值,第二个参数则吧带有数据的Intent 传递回去。
finish();} //销毁活动
});
protected void onActivityResult(int requestCode,int resultCode, Intent data) { //第一个参数是活动传入的请求码1,第二个参数是在返回数据时传入的处理结果RESULT_OK。
super.onActivityResult(requestCode, resultCode, data); //注意
switch (requestCode) {
case 1:
if (requestCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
Log.d("MainActivity", returnedData);
}
break;
default:
}
}
在以上的基础上,在SecondActivity 中重写:
public void onBackPressedf(){
Intent intent = new Intent();
intent.putExtra("data_return","Hello 主活动");
setResult(RESULT_OK,intent);
finish();
}
新建项目,创建主活动、两个子活动(NormalActivity、DialogActivity)与对应的布局。两个子活动布局各添加一个TextView,主活动布局添加两个button。
修改AndroidManifest.xml:
<activity android:name=".DialogActivity" android:theme="@android:style/Theme.Dialog"></activity>
修改主活动代码:
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button startNormalActivity = (Button) findViewById(R.id.start_normal_activity);
Button startDialogActivity = (Button) findViewById(R.id.start_dialog_activity);
startNormalActivity.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(MainActivity.this,NormalActivity.class);
startActivity(intent);
}
});
startDialogActivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,DialogActivity.class);
}
});
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG,"onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG,"onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG,"onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG,"onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG,"onDestory");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG,"onRestart");
}
启动活动时若发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不再创建新的活动实例。
修改AndroidManifest.xml:
在activity标签内加android:launchMode="singleTop"
新建一个类(Java Class):无需注册
public class BaseActivity extends AppCompatActivity { //继承AppCompatActivity!
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("BaseActivity",getClass().getSimpleName());
}
}
让所有类继承 BaseActivity
原文:https://www.cnblogs.com/zzzketi/p/13247163.html