我的github: https://github.com/WHJWNAVY

探究活动(Activity)

半岛铁盒 WHJWNAVY 2336℃

手动创建Activity并加载Layout:

创建一个空activity


 
 

不自动生成layout文件,不设置成主activity(后续手动设置)


 
 

创建一个layout布局


 
 


 
 

在Activity中引用布局文件

public class MainActivity extends AppCompatActivity{

 
 

    @Override

    protected void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main_layout);

    }

}

 
 

在AndroidManifest.xml文件中注册activity

<?xml version=“1.0” encoding=“utf-8″?>

<manifest xmlns:android=http://schemas.android.com/apk/res/android&#8221;

    package=“com.wnavy.mynoactivity”>

 
 

    <application

        android:allowBackup=“true”

        android:icon=“@mipmap/ic_launcher”

        android:label=“@string/app_name”

        android:roundIcon=“@mipmap/ic_launcher_round”

        android:supportsRtl=“true”

        android:theme=“@style/AppTheme”>

        <activity

            android:name=“.MainActivity”

            android:label=“@string/main_activity_label”>

            <intent-filter>

                <action android:name=“android.intent.action.MAIN” />

                <category android:name=“android.intent.category.LAUNCHER” />

            </intent-filter>

        </activity>

    </application>

</manifest>

 
 

 
 

 
 


Toast的使用:

public class MainActivity extends AppCompatActivity {

 
 

    Button buttonOK;

    Button buttonExit;

 
 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main_layout);

        buttonOK = (Button) findViewById(R.id.buttonOK);

        buttonExit = (Button) findViewById(R.id.buttonExit);

 
 

        buttonOK.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                Toast.makeText(MainActivity.this“You clicked button “ +

                        MainActivity.this.getString(R.string.button_ok), Toast.LENGTH_SHORT).show();

            }

        });

 
 

        buttonExit.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                Toast.makeText(MainActivity.this“You clicked button “ +

                        MainActivity.this.getString(R.string.button_exit), Toast.LENGTH_SHORT).show();

            }

        });

    }

}

 
 

根据string id获取字符串:

MainActivity.this.getString(R.string.button_ok);

 
 

在活动中使用Menu菜单:

在res文件夹中新建”menu”文件夹,并在”menu”文件夹中新建菜单文件”main_menu”


 
 

在”main_menu.xml“中添加菜单项


 
 

在MainActivity中重写onCreateOptionsMenu方法给Activity添加菜单

   @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        //super.onCreateOptionsMenu(menu);

        //getMenuInflater方法得到MenuInflater对象,再调用它的inflate方法给当前活动创建菜单.

        getMenuInflater().inflate(R.menu.main_menu, menu);

        return true;//返回true表示允许菜单显示处来

    }

 
 

在MainActivity中重写onOptionsItemSelected方法给为每个菜单项加入自己处理逻辑

    @Override

    public boolean onOptionsItemSelected(MenuItem item) {

        //return super.onOptionsItemSelected(item);

        switch (item.getItemId()) {

            case R.id.item_add:

                Toast.makeText(this“You selected item “ +

                        this.getString(R.string.item_add), Toast.LENGTH_SHORT).show();

                break;

            case R.id.item_del:

                Toast.makeText(this“You selected item “ +

                        this.getString(R.string.item_del), Toast.LENGTH_SHORT).show();

                break;

            case R.id.item_save:

                Toast.makeText(this“You selected item “ +

                        this.getString(R.string.item_save), Toast.LENGTH_SHORT).show();

                break;

            default:

                break;

        }

        return true;

    }

}


 
 


 
 

 
 

通过finish方法销毁活动:

buttonExit.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                Toast.makeText(MainActivity.this“You clicked button “ +

                        MainActivity.this.getString(R.string.button_exit), Toast.LENGTH_SHORT).show();

                finish();//通过finish方法销毁活动

            }

        });

 
 

使用intent在Activity间跳转:

显式Intent:

//显式Intent

button2Child.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

        //先创建一个Intent,传入MainActivity.this作为上下文,传入ChildActivity.class作为目标Activity,

        //即在MainActivity中打开ChildActivity.然后通过startActivity方法来执行这个Intent

        Intent myIntemt = new Intent(MainActivity.this, ChildActivity.class);

        startActivity(myIntemt);

        //跳转到ChildActivity之后,只需要按Back键就可以销毁ChildActivity返回MainActivity

    }

});


 
 


 
 

隐式Intent:

相比于显式Intent,隐式Intent并不明确指出我们想要启动哪个Activity,而是指定了一系列抽象的action和category等信息,然后交由系统去分析这个Intent,并帮我们找出合适的Activity去启动.

为了让”ChildActivity”能够响应隐式Intent,需要在AndroidManifest.xml中配置ChildActivity的<intent-filter>标签.

<application>

    <activity

        android:name=“.ChildActivity”

        android:label=“@string/child_activity_label”>

        <!–配置ChildActivityintent-filter的内容,指定ChildActivity能够响应的

        actioncategory,action中指定了ChildActivity可以响应com.wnavy.mynoactivity.

        ACTION_START这个action,category则包含了一些附加信息,更精确的指明了ChildActivity

        能够响应的Intent中还可能带有的category,只有actioncategory中的内容能够同时匹配上

        Intent中指定的actioncategory,ChildActivity才会响应这个Intent—>

        <intent-filter>

            <action android:name=“com.wnavy.mynoactivity.ACTION_START”/>

            <category android:name=“android.intent.category.DEFAULT”/>

        </intent-filter>

    </activity>

</application>

 
 

button2Child.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

    //创建隐式Intent,为其指定action字符串

    Intent hidenIntent = new Intent(“com.wnavy.mynoactivity.ACTION_START”);

    //为该intent添加category,如果是默认的category,也可以不用手动添加,Intent会为我们自动添加

    //hidenIntent.addCategory(“android.intent.category.DEFAULT”);

 
 

    //如果我们在Intent中再添加一个category,再次运行程序,点击跳转程序会崩溃,因为ChildActivity

    //中并没有配置这个category,系统会找不到能否响应这个IntentActivity

    hidenIntent.addCategory(“com.wnavy.mynoactivity.MY_CATEGORY”);

    startActivity(hidenIntent);

}

});


 
 


 
 

使用隐式Intent打开其他应用的Activity:

//使用Intent打开其他应用的Activity

button2Child.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

        //创建Intent,用它打开一个web页面

        Intent myIntent = new Intent(Intent.ACTION_VIEW);

        myIntent.setData(Uri.parse(http://www.wnavy.com&#8221;));

        startActivity(myIntent);

    }

});


Activity的<intent-filter>标签中还可以载配置一个<data>标签,用于更精确的指定当前活动能够响应什么类型的数据.<data>标签中主要可以配置以下内容:

<intent-filter>

<action android:name=“android.intent.action.VIEW” />

<category android:name=“android.intent.category.DEFAULT”/>

<category android:name=“android.intent.category.BROWSABLE” />

<data android:scheme=“http”/>

<data android:scheme=用于指定数据的协议部分,比如http,http,javascript/>

<data android:host=用于指定数据的主机名部分,例如http://www.wnavy.com”;/>

<data android:port=用于指定数据的端口部分,一般紧随在主机名之后/>

<data android:path=用于指定主机名和端口之后的部分,例如一段网址中跟在域名之后的内容/>

<data android:mimeType=用于指定可以处理的数据类型,运行使用通配符的方式进行指定/>

</intent-filter>

 
 

一个示例:自定义一个Activity,为其添加data:scheme:http属性以用来打开一个web页面

<activity android:name=“.IntentActivity”>

<intent-filter>

    <action android:name=“android.intent.action.VIEW” />

    <category android:name=“android.intent.category.DEFAULT”/>

    <category android:name=“android.intent.category.BROWSABLE” />

    <data android:scheme=“http”/>

</intent-filter>

</activity>

 
 

//使用Intent打开其他应用的Activity

button2Child.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

        //创建Intent,用它打开一个web页面

        //Intent myIntent = new Intent(Intent.ACTION_VIEW);

        Intent myIntent = new Intent();

        myIntent.setAction(“android.intent.action.VIEW”);

        myIntent.addCategory(“android.intent.category.DEFAULT”);

        myIntent.addCategory(“android.intent.category.BROWSABLE”);

        myIntent.setData(Uri.parse(http://www.wnavy.com&#8221;));

        startActivity(myIntent);

    }

});

 
 


 
 


———-又一个例子———-

 button2Child.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

        Intent telIntent = new Intent(Intent.ACTION_DIAL);

        telIntent.setData(Uri.parse(“tel:10010″));

        startActivity(telIntent);

    }

});


 
 

向下一个Activity传递数据:

//MainActivity

public class MainActivity extends AppCompatActivity {

    Button startSecond;

    EditText mainTextInput;

 
 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mainTextInput = (EditText) findViewById(R.id.textInput);

        startSecond = (Button) findViewById(R.id.startSecond);

 
 

        startSecond.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                String dataString = mainTextInput.getText().toString();

                //String dataString = “Hello Second Activity!”;

                Intent toSecontIntent = new Intent(MainActivity.this, SecondActivity.class);

                toSecontIntent.putExtra(“String2Second”, dataString);

                startActivity(toSecontIntent);

            }

        });

    }

}

 
 

//SecondActivity

public class SecondActivity extends AppCompatActivity {

 
 

    Button back2Main;

    EditText secontInput;

    Intent fromMainIntent;

    private static final String TAG = “SecondActivity”;

 
 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_second);

        secontInput = (EditText) findViewById(R.id.secondTextInput);

        back2Main = (Button) findViewById(R.id.backToMain);

 
 

        fromMainIntent = getIntent();

        String data = fromMainIntent.getStringExtra(“String2Second”);

        secontInput.setText(data);

        Log.d(TAG, “onCreate: String From Main[“ + data + “]”);

    }

}


 
 


返回数据给上一个Activity:

public class MainActivity extends AppCompatActivity {

    Button startSecond;

    EditText mainTextInput;

    private static final String TAG = “MainActivity”;

 
 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mainTextInput = (EditText) findViewById(R.id.textInput);

        startSecond = (Button) findViewById(R.id.startSecond);

 
 

        startSecond.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                Intent fromSecontIntent = new Intent(MainActivity.this, SecondActivity.class);

                /* startActivityForResult也可以用于启动Activity,但这个方法期望在活动销毁的时候

                * 能够返回一个结果给上一个Activity,startActivityForResult接受两个参数,第一个参

                * 数是Intent,第二个参数是请求码,用于在之后的回调函数中判断数据的来源.请求码只要

                * 是一个唯一的值就可以了.

                * */

                startActivityForResult(fromSecontIntent, 100);

            }

        });

    }

 
 

    /* 使用startActivityForResult来启动SecondActivity,SecondActivity被销毁之后会调用上一个Activity

     * onActivityResult方法,因此我们需要在MainActivity中重写onActivityResult方法来得到SecondActivity

     * 返回的数据. onActivityResult方法带有三个参数,requestCode即是我们在启动SecondActivity时传入的请求

     * ,resultCode即是SecondActivity返回是传入的处理结果,data即是SecondActivity返回的携带数据的Intent.

     * 因为在MainActivity可能调用startActivityForResult方法启动很多不同的Activity,每一个Activity返回的数

     * 据都会回调onActivityResult方法,因此我们要通过检查requestCode来判断数据的来源,确定数据是从

     * SecondActivity返回的之后,再通过resultCode的值来判断处理结果是否成功,最后从data中取出数据.

    * */

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode) {

            case 100:

                if (resultCode == RESULT_OK) {

                    String stringDataFromSecond = data.getStringExtra(“StringFromSecond”);

                    mainTextInput.setText(stringDataFromSecond);

                    Log.d(TAG, “onActivityResult: String From Second[“ + stringDataFromSecond + “]”);

                }

        }

    }

}

 
 

public class SecondActivity extends AppCompatActivity {

 
 

    Button back2Main;

    EditText secontInput;

    Intent fromMainIntent;

    private static final String TAG = “SecondActivity”;

 
 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_second);

        secontInput = (EditText) findViewById(R.id.secondTextInput);

        back2Main = (Button) findViewById(R.id.backToMain);

 
 

        back2Main.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                /* 这个Intent不指定启动任何Activity,仅仅是为了传递数据.把要传递的数据放入Intent,

                * 后调用setResult方法,这个方法是专门用于向上一个Activity返回数据的, setResult接受两个

                * 参数,第一个参数用于向上一个Activity返回处理结果,一般只使用RESULT_OKRESULT_CANCELED,

                * 第二个参数把带有数据的Intent传递回去,最后调用finish方法来销毁当前Activity.

                * */

                Intent back2MainIntent = new Intent();

                String stringData2Main = secontInput.getText().toString();

                back2MainIntent.putExtra(“StringFromSecond”,stringData2Main);

                setResult(RESULT_OK, back2MainIntent);

                finish();

            }

        });

    }

}

 
 


 
 


 
 


 
 

Activity的生命周期

Activity返回栈


Activity状态


 
 

Activity的生存周期


 
 


 
 

———-一个例子———-

<activity android:name=“.NormalActivity” />

<activity

    android:name=“.DialogActivity”

    android:theme=“@style/Theme.AppCompat.Dialog” />

<activity android:name=“.MainActivity”>

    <intent-filter>

        <action android:name=“android.intent.action.MAIN” />

        <category android:name=“android.intent.category.LAUNCHER” />

    </intent-filter>

</activity>

 
 

public class MainActivity extends AppCompatActivity {

    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);

 
 

        Log.d(TAG, “onCreate”);

 
 

        startNormalActivity.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                startActivity(intentToNormal);

            }

        });

 
 

        startDialogActivity.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                startActivity(intentToDialog);

            }

        });

    }

 
 

    @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, “onDestroy”);

    }

 
 

    @Override

    protected void onRestart() {

        super.onRestart();

        Log.d(TAG, “onRestart”);

    }

}

 
 


程序启动时:


 
 

点击”StartNormalActivity”按钮时:


 
 

点击返回键时:


 
 

点击”StartDialogActivity”按钮时:



 
 

点击返回键时:


 
 

程序退出时:


 
 

 
 

在Activity被回收前保存数据:

用户在Activity A的基础上启动了Activity B,A就进入了Stop状态,假如这时系统内存不足,A就会被系统回收,然后用户按返回键返回A时,并不会执行A的onRestart方法,而是执行A的onCreate方法,因为A在这种情况下被重新创建了一次.

如果A中存在临时的数据和状态,再返回A时这些临时的数据和状态都不在了,因为A被重建了,为了解决这一问题,可以重写A的onSaveInstanceState回调方法,这个方法可以保证在A被回收之前一定会被调用.
onSaveInstanceState方法会携带一个Bundle类型的参数,Bundle提供了一系列的方法用于保存数据,比如可以用putString(“key_string”, “value_string”)方法保存字符串.

 
 

在onCreate方法中也有一个Bundle类型的参数,一般情况下为null,但是如果之前通过onSaveInstanceState保存过数据的话,这个参数就会带有之前保存的全部数据,我们只需要通过相应的取值方法将数据取出即可.

public class MainActivity extends AppCompatActivity {

    private static final String TAG = “MainActivity”;

 
 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 
 

        if (savedInstanceState != null) {

            String saveData = savedInstanceState.getString(“Save_Key”);

            Log.d(TAG, “onCreate: “ + saveData);

        }

    }

 
 

    @Override

    protected void onSaveInstanceState(Bundle outState) {

        super.onSaveInstanceState(outState);

        String dataSave = “Save data in Bundle”;

        outState.putString(“Save_Key”, dataSave);

    }

}

 
 

Activity的启动模式

standard模式:


public class FirstActivity extends AppCompatActivity {

    private static final String TAG = “FirstActivity”;

 
 

    @Override

    protected void onDestroy() {

        super.onDestroy();

        Log.d(TAG, “onDestroy: “ + FirstActivity.this.toString());

    }

 
 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_first);

        Log.d(TAG, “onCreate: “ + FirstActivity.this.toString());

 
 

        Button helloButton = findViewById(R.id.hello_button);

        helloButton.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                /* FirstActivity的基础上再次启动FirstActivity */

                Intent intent = new Intent(FirstActivity.this, FirstActivity.class);

                startActivity(intent);

            }

        });

    }

}

每点击一次按钮,返回栈中就会新增加一个FirstActivity,需要点击多次返回


 
 

singleTop模式:


在上一个例子中,把FirstActivity的启动模式改为singleTop之后,不管点击按钮多少次,返回栈中都只有Activity.

<activity 

  android:name=“.FirstActivity” 

  android:launchMode=“singleTop”>

  <intent-filter>

    <actionandroid:name>

      <categoryandroid:name></categoryandroid:name>

    </actionandroid:name>

  </intent-filter>

</activity>


这是因为FirstActivity已经处于栈顶,所以每当想要再启动一个FirstActivity时会直接使用栈顶的FirstActivity.

但是,当FirstActivity没有处于栈顶时,这时再启动FirstActivity仍然会重新创建一个新的FirstActivity,如下:

public class FirstActivity extends AppCompatActivity {

    private static final String TAG = “FirstActivity”;

 
 

    @Override

    protected void onDestroy() {

        super.onDestroy();

        Log.d(TAG, “onDestroy: “ + FirstActivity.this.toString());

    }

 
 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_first);

        Log.d(TAG, “onCreate: “ + FirstActivity.this.toString());

 
 

        Button helloButton = findViewById(R.id.hello_button);

        helloButton.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                /* FirstActivity的基础上启动SecondActivity */

                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

                startActivity(intent);

            }

        });

    }

}

 
 

public class SecondActivity extends AppCompatActivity {

 
 

    private static final String TAG = “SecondActivity”;

 
 

    @Override

    protected void onDestroy() {

        super.onDestroy();

        Log.d(TAG, “onDestroy: “ + SecondActivity.this.toString());

    }

 
 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_second);

        Log.d(TAG, “onCreate: “ + SecondActivity.this.toString());

 
 

        Button secondButton = findViewById(R.id.second_button);

        secondButton.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                /* 返回FirstActivity */

                Intent intent = new Intent(SecondActivity.this, FirstActivity.class);

                startActivity(intent);

            }

        });

    }

}

 
 

<application

    android:icon=“@mipmap/ic_launcher”

    android:label=“@string/app_name”

    android:theme=“@style/AppTheme”>

    <activity

        android:name=“.FirstActivity”

        android:launchMode=”singleTop”>

        <intent-filter>

            <action android:name=“android.intent.action.MAIN” />

            <category android:name=“android.intent.category.LAUNCHER” />

        </intent-filter>

    </activity>

    <activity android:name=“.SecondActivity”></activity>

</application>

 
 


 
 

singleTask模式:


在上面的例子中,把FirstActivity的启动模式改为singleTask:

<activity

    android:name=“.FirstActivity”

    android:launchMode=“singleTask”>

    <intent-filter>

        <action android:name=“android.intent.action.MAIN” />

        <category android:name=“android.intent.category.LAUNCHER” />

    </intent-filter>

</activity>

<activity android:name=“.SecondActivity”></activity>

当从SecondActivity返回到FirstActivity时,并没有重新创建一个FirstActivity(没有调用onCreate方法),而是直接调用了FirstActivity的onRestart方法.这是因为FirstActivity的启动模式为singleTask模式,当想要再启动一个FirstActivity时,会先在返回栈中检查是否存在FirstActivity的实例,如果存在则直接使用该实例,并把FirstActivity之上的所有Activity都出栈.如果不存在,则会创建一个FirstActivity的实例.

 
 

singleInstance模式:


指定为singleInstance模式的Activity会启用一个新的返回栈来管理这个活动,这个返回栈可以在多个应用程序之间共享.

 
 

知晓当前是哪一个Activity

新建一个BaseActivity类,BaseActivity只是一个普通的java类,不需要在AndroidManifest.xml中注册,BaseActivity继承自A品牌C哦么patActivity,在BaseActivity中重写onCreate方法,并在onCreate方法中打印当前Activity的名称,然后让其他用户Activity都继承自BaseActivity,这样就可以在不修改其他用户Activity的情况下打印Activity名称.

public class BaseActivity extends AppCompatActivity {

    private static final String TAG = “BaseActivity”;

 
 

    @Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        Log.d(TAG, “onCreate: “ + getClass().getSimpleName());

    }

}


 
 

随时随地退出程序

public class ActivityCollector {

    public static List<Activity> activityList = new ArrayList<>();

 
 

    public static void addActivity(Activity activity) {

        activityList.add(activity);

    }

 
 

    public static void removeActivity(Activity activity) {

        activityList.remove(activity);

    }

 
 

    public static void finishAll() {

        for (Activity activity : activityList) {

            if (!activity.isFinishing()) {

                activity.finish();

            }

        }

    }

}

 
 

public class BaseActivity extends AppCompatActivity {

    private static final String TAG = “BaseActivity”;

 
 

    @Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        Log.d(TAG, “onCreate: “ + getClass().getSimpleName());

        ActivityCollector.addActivity(this);

    }

 
 

    @Override

    protected void onDestroy() {

        super.onDestroy();

        Log.d(TAG, “onDestroy: “ + getClass().getSimpleName());

        ActivityCollector.removeActivity(this);

    }

}

 
 

public class FirstActivity extends BaseActivity {

 
 

    private static final String TAG = “FirstActivity”;

 
 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_first);

 
 

        //Log.d(TAG, “onCreate: ” + FirstActivity.this.toString());

 
 

        Button helloButton = findViewById(R.id.hello_button);

        Button exitButton = findViewById(R.id.hello_exit_button);

        helloButton.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                /* FirstActivity的基础上启动SecondActivity */

                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

                startActivity(intent);

            }

        });

 
 

        exitButton.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                ActivityCollector.finishAll();

            }

        });

    }

}

 
 

public class SecondActivity extends BaseActivity {

    private static final String TAG = “SecondActivity”;

 
 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_second);

 
 

        //Log.d(TAG, “onCreate: ” + SecondActivity.this.toString());

 
 

        Button secondButton = findViewById(R.id.second_button);

        Button exitButton = findViewById(R.id.second_exit_button);

        secondButton.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                /* 返回FirstActivity */

                Intent intent = new Intent(SecondActivity.this, FirstActivity.class);

                startActivity(intent);

            }

        });

 
 

        exitButton.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                ActivityCollector.finishAll();

            }

        });

    }

}


<

p style=”margin-left: 27pt”> 
 

转载请注明:胡椒小兄弟 » 探究活动(Activity)

喜欢 (0)or分享 (0)