[React Native Android 安利系列]原生小知識(創建activity并跳轉)

react-native畢竟也要有一些原生的知識,這里我們先學習一下原生android創建activity,并跳轉的過程。這有助于我們的前端開發同學,掌握一下android姿勢。本實驗的view采用react進行渲染,也為后續的學習做下鋪墊。如果已經有了相關知識的同學,直接跳過即可。

1. android的activity跳轉(原生基礎小知識)

在我們做js調用activity之前,先復習一下簡單的android開發的知識---兩個activity之間的跳轉。

對于沒有開發過android app的同學來說,需要先了解一下android的基礎知識。android中有一個比較重要的組件--activity,是用于顯示View的。比如,我們利用react創建的最簡單的app,當我們一開始打開app的時候,其實就進入了一個主的activity,由其渲染我們的主界面,在這里,可以簡單的理解activity為瀏覽器中的一個tab(可能并不嚴謹,不過對前端開發同學來說,可能更容易理解)。

兩個activity之間,可以互相跳轉(就像瀏覽器中的tab可以互相切換),我們來試試做兩個activity,并讓它們互相跳轉(就像看到頁面跳轉那樣的開心),這樣我們就能更快的理解activity了。

1.1 新建activity

這里,我們利用之前構建的項目--helloReact來繼續我們的旅途。

在這個項目中,我們看到了一個已經存在的activity,就是我們的主activity(如圖1.1.1)。

圖1.1.1

接下來,我們新建一個activity,在com.hellowreact下(與MainActivity.java放在一起即可),右鍵點擊文件夾,并選擇new->java Class(圖1.1.2)

圖1.1.2

這里我們起名為DetailActivity

圖1.1.3

代碼直接從MainActivity中復制過來即可,并將getMainComponentName的返回值略作修改,改為"detail"

package com.hellowreact;

import com.非死book.react.ReactActivity;
import com.非死book.react.ReactPackage;
import com.非死book.react.shell.MainReactPackage;

import java.util.Arrays;
import java.util.List;

/**
 * Created by baidu on 16/6/8.
 */
public class DetailActivity extends ReactActivity {

    /**
     * Returns the name of the main component registered from JavaScript.
     * This is used to schedule rendering of the component.
     */
    @Override
    protected String getMainComponentName() {
        return "detail";
    }

    /**
     * Returns whether dev mode should be enabled.
     * This enables e.g. the dev menu.
     */
    @Override
    protected boolean getUseDeveloperSupport() {
        return BuildConfig.DEBUG;
    }

    /**
     * A list of packages used by the app. If the app uses additional views
     * or modules besides the default ones, add more packages here.
     */
    @Override
    protected List<ReactPackage> getPackages() {
        return Arrays.<ReactPackage>asList(
                new MainReactPackage()
        );
    }
}

1.2 注冊新的activity

請注意,我們新建的activity需要在AndroidManifest.xml中進行注冊,AndroidManifest.xml位于app/manifests/下。

圖1.2.1

我們打開AndroidManifest.xml,如圖,可以看到其中已經有了一個叫MainActivity的activity

圖1.2.2

我們在其中再添加一項,如圖1.2.3

<activity android:name=".DetailActivity" />

圖1.2.3

1.3 為新的activity添加渲染的view

我們有了新的activity,也就要添加一個渲染的view。打開項目中的index.android.js,新建一個react組件,并將其注冊

class detail extends Component {
    constructor(props) {
        super(props);
    }   

    render() {
        return <View>
            <Text>detail!!!</Text>
        </View>;
    }   
}
AppRegistry.registerComponent('detail', () => detail);

至此,我們的view也有了。

1.4 先來看看我們新做的activity

為了早點看到效果,我們先把新制作的activity作為主要啟動的activity。只需改寫AndroidManifest.xml即可。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hellowreact"
    android:versionCode="1"
    android:versionName="1.0">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="22" />

    <application
      android:allowBackup="true"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:theme="@style/AppTheme">
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
      </activity>
      <activity android:name="com.非死book.react.devsupport.DevSettingsActivity" />
        <activity android:name=".DetailActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

我們吧intent-filter從MainActivity中提出,并放到了DetailActivity中去。

讓我們重裝一下應用,于是我們就看到了新的activity,并看到了新增加的react組件渲染到了其上(如圖1.4.1)。

圖1.4.1

1.5 開始寫activity之間的跳轉

看過了新添加的activity之后,讓我們先把AndroidManifest.xml給改回去。這樣我們的啟動界面就又是我們的列表啦(如圖1.5.1)

圖1.5.1

我們在MainActivity中,添加對于onBackPressed的重寫(當返回鍵按下的時候)

public class MainActivity extends ReactActivity {

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Intent intent = new Intent(this, DetailActivity.class);
        startActivity(intent);
    }

    ........

當用戶,按下返回鍵的時候,跳轉到我們的DetailActivity中去。

重新Run一下app,我們看到了列表頁,點擊返回按鈕的時候(如圖1.5.2),我們看到跳轉到了DetailActivity里面去,大功告成(如圖1.5.3)

圖1.5.2

圖1.5.3

怎么樣,是不是和頁面跳轉一樣簡單呢?

本文中相關例子,可以在此找到:

https://github.com/houyu01/re...

既然了解了原生知識,我們下一節將利用本節學到的原生知識,使用js去調用。這樣雙劍合璧,便可以更加高效的開發react-native應用啦~

系列文章

[React Native Android安利系列]搭建React Native Android環境 
[React Native Android安利系列]創建簡單 RN 應用(以js角度來看RN)
[React Native Android安利系列]原生小知識(創建activity并跳轉)

 

來自:https://segmentfault.com/a/1190000006082315

 

 本文由用戶 Doreen3591 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!