您的位置:首页 > 移动开发 > Android开发

Android 之路28---四大组件之Activity

2018-01-22 10:27 375 查看

导读

1.Activity的介绍即要素

2.xml语言的简介即与html语言的区别

3.Activity与view

4.多个activity以及跳转

5.不同Activity之间的数据交流

6.Activity的生命周期

Activity的介绍即要素









Manifest.xml文件中决定了MainActivity首先被执行,然后MainActivity中又决定调用哪个layout

xml语言的简介即与html语言的区别















Activity与view

在xml(layout)文件中的控件,在activity都可以获取,如

(TextView)findViewById(R.id.TextView1)







view中xml属性



























修改TextView内容及运用监听器

⚠️在MainActivity中导包的快捷键 alt+回车







(layout)activity_main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.hala.view01.MainActivity">

<TextView
android:id="@+id/textview01"
android:layout_width="356dp"
android:layout_height="78dp"
android:gravity="center"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.502"
tools:layout_editor_absoluteY="201dp" />

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
tools:layout_editor_absoluteX="148dp"
tools:layout_editor_absoluteY="300dp" />

</android.support.constraint.ConstraintLayout>




MainActivity.java文件

package com.hala.view01;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private TextView textView;
//监听器:1.定义Button对象
private Button button;
private  int sum=0;
//监听器:4.定义ButtonListener对象
private  ButtonListener buttonListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//此处就是通过️向下转型获取了textview01
//注意:这句话一定要写在setContentView后边
textView=(TextView)findViewById(R.id.textview01);
//在代码中动态修改一个TextView的内容的方法
textView.setText("hello,Emilia Clarke");
//监听器:2.获取button对象
button=(Button)findViewById(R.id.button);
//监听器:5.生成监听器对象,并为按钮添加监听器
buttonListener=new ButtonListener();
button.setOnClickListener(buttonListener);

}

//监听器:3.创建监听器的内部类并重写OnClick方法
//注意这里实现的OnClickListener要是View包里的
class ButtonListener implements View.OnClickListener{

@Override
public void onClick(View v) {
sum++;
textView.setText("当前点击次数为:"+sum);
}
}
}


显示结果





不同Activity之间的数据交流

activity1的布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.hala.view01.MainActivity">

<Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginLeft="8dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="8dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="8dp"
android:text="跳转到第二个页面"
android:onClick="click"/>

</android.support.constraint.ConstraintLayout>


activity1的java文件

package com.hala.view01;

import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

public static final String KEY = "key";

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initView();

}

private void initView(){
findViewById(R.id.bt1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Intent intent = new Intent(MainActivity.this, Main2Activity.class);
//这里可以传很多类型,并且可以调用R包里的内容
intent.putExtra(KEY, "Emilia");
intent.putExtra("key2",getString(R.string.myLove));
//这里是不需要第二个页面返回数据使用得方法
//startActivity(intent);
//这里是需要第二个页面返回数据使用得方法
startActivityForResult(intent,234);
//234是requesrCode 请求码
/*
第二种传值的方法
final Intent intent = new Intent(MainActivity.this, Main2Activity.class);
Bundle bundle=new Bundle();
bundle.putString(KEY,"Emilia");
bundle.putInt("key2",2);
intent.setExtra(KEY,bundle);
*/
}
});
}

/**
*
* @param requestCode 请求码 就是页面一的234
* @param resultCode 结果码 就是页面二的1
* @param data 数据 就是页面二的Intent (it)
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==234 && resultCode==1){
if(data!=null){
setTitle(data.getStringExtra("key"));
}
}
}
}


activity2的布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.hala.view01.Main2Activity">

<Button
android:id="@+id/bt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent" />
</android.support.constraint.ConstraintLayout>


activity2的java文件

package com.hala.view01;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Main2Activity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);

Button button = (Button) findViewById(R.id.bt2);

if(getIntent()!=null){
String value=getIntent().getStringExtra(MainActivity.KEY);
button.setText(value);

/*
第二种获得值的方法
if(getIntent()!=null){
Bundle bundle=getIntent().getBundleExtra(MainActivity.KEY);
if(bundle!=null){
String value=bundle.getString(MainActivity.KEY);
button.setText(value);
}
}
*/
}

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent it=new Intent();
it.putExtra("key","Neymar.JR");
//第一个参数:resultCode结果码
//第二个参数:传回的intent
setResult(1,it);
//用来结束第二个页面的方法
finish();
}
});
}

}


显示结果







⚠️快捷键

将方法中的参数提取出来的快捷键

startActivity(new Intent(MainActivity.this,Main2Activity.class));


Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);


command+alt+v

将一个字符串变成一个常量

intent.putExtra("key","emilia");


public static final String KEY = "key";
...
intent.putExtra(KEY,"emilia");


command+alt+c

多个activity以及跳转





package com.hala.view01;

import android.content.Intent;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;

import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RatingBar;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.ToggleButton;

public class MainActivity extends AppCompatActivity {

private Button button;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hala1);

button=(Button)findViewById(R.id.bt);
button.setOnClickListener(new buttonLisener());
}

class buttonLisener implements View.OnClickListener{

@Override
public void onClick(View v) {
Intent it=new Intent();
it.setClass(MainActivity.this,Main2Activity.class);
startActivity(it);
}
}

}


显示结果







Activity的生命周期



第一个流程

启动一个页面后

onCreate()->onStart()->onResume()

返回

onPause()->onStop()->onDestroy()

第二个流程

启动一个页面后,又触发一个页面,遮挡但并未完全盖住页面

启动

onCreate()->onStart()->onResume()

触发Dialog

onPause()

撤回Dialog

onResume()

⚠️这里Dialog是指自定义的Dialog,系统的Dialog不会不会走这个流程,而会走第一个流程

第三个流程

启动一个页面后又启动一个页面,完全遮挡住原来的页面

启动第一个页面

onCreate()->onStart()->onResume()

启动第二个页面

onPause()->onStop()

又重新回到第一个页面

onRestart()->onStart()->onResume()

⚠️图中左边一个流程是在内存不够用时发生的

流程补充

1.当用户按返回键时会调用系统中的onBackPressed()

2.关于onSaveInstanceState()的使用

@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putString("key","Emilia Clarke");
}
//此方法是用来在Activity被销毁时存储数据用的,以便下次在重新调用
//这里是以键值对的形式存放数据的
//put后边的类型不止是String类型,其他类型也可以

//下次调用该Activity时,可以在onCreate()方法中获取存储的信息
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
...
String value=savesInstanceState.getString("key");
//用键值读取存储的信息
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: