Skip to content

Commit

Permalink
add Native Module
Browse files Browse the repository at this point in the history
  • Loading branch information
SummerRock committed Mar 4, 2024
1 parent 1cf2e60 commit ec93fad
Show file tree
Hide file tree
Showing 8 changed files with 76 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import com.example.monitor.AppLifecycleListener;
import com.example.myapplication.base.login.LoginManager;
import com.example.myapplication.main.MainActivityV2;
import com.example.react.module.NetworkModulePackage;
import com.example.react.module.DefaultModulePackage;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
Expand All @@ -43,7 +43,7 @@ public boolean getUseDeveloperSupport() {
protected List<ReactPackage> getPackages() {
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here
packages.add(new NetworkModulePackage());
packages.add(new DefaultModulePackage());
return packages;
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import com.alibaba.android.arouter.launcher.ARouter;
import com.common.mainModule.LogUtils;
import com.common.router.RouterConstants;
import com.example.react.module.NetworkModulePackage;
import com.example.react.module.DefaultModulePackage;
import com.facebook.react.PackageList;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactPackage;
Expand Down Expand Up @@ -45,7 +45,7 @@ protected void onCreate(Bundle savedInstanceState) {
}
mReactRootView = new ReactRootView(this);
List<ReactPackage> packages = new PackageList(getApplication()).getPackages();
packages.add(new NetworkModulePackage());
packages.add(new DefaultModulePackage());
// 有一些第三方可能不能自动链接,对于这些包我们可以用下面的方式手动添加进来:
// packages.add(new MyReactNativePackage());
// 同时需要手动把他们添加到`settings.gradle`和 `app/build.gradle`配置文件中。
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.example.react.module;

import android.app.Activity;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

public class CloseActivityModule extends ReactContextBaseJavaModule {

public CloseActivityModule(ReactApplicationContext reactContext) {
super(reactContext);
}

@Override
public String getName() {
return "CloseActivityModule";
}

@ReactMethod
public void closeActivity() {
Activity currentActivity = getCurrentActivity();
if (currentActivity != null) {
currentActivity.finish();
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,13 @@
import java.util.Collections;
import java.util.List;

public class NetworkModulePackage implements ReactPackage {
public class DefaultModulePackage implements ReactPackage {
@NonNull
@Override
public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactApplicationContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new NetworkNativeModule(reactApplicationContext));
modules.add(new CloseActivityModule(reactApplicationContext));
return modules;
}

Expand Down
2 changes: 2 additions & 0 deletions app/common/native/module.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { NativeModules } from 'react-native';

export default NativeModules.NetworkNativeModule;

export const CloseActivityModule = NativeModules.CloseActivityModule;
Binary file added app/pages/collection/image/arrow_black.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
38 changes: 35 additions & 3 deletions app/pages/collection/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import React, {useEffect, useState} from 'react';
import {FlatList, Linking, StyleSheet, Text, TouchableOpacity, View} from 'react-native';
import {ActivityIndicator, FlatList, Linking, Image, StyleSheet, Text, TouchableOpacity, View} from 'react-native';
import {CollectionData, CollectionItem} from "./interface";
import {commonFetch, NetStatus} from "../../common/network";
import ApiStatus from "../../common/component/apiStatus";
import {Constants, ListInterActStatus} from "../../common/constants";
import {CloseActivityModule} from "../../common/native/module";

const App = (initialProps) => {

Expand All @@ -17,7 +18,10 @@ const App = (initialProps) => {
if (!responseData) {
setStatus(NetStatus.LOADING)
}
const result = await commonFetch<CollectionData>('https://www.wanandroid.com/lg/collect/list/0/json/');
const page = responseData?.curPage || 0
const url = `https://www.wanandroid.com/lg/collect/list/${page}/json/`;
const result = await commonFetch<CollectionData>(url);
// console.log(result)
setStatus(NetStatus.SUCCESS)
setResponseData(result.data);
} catch (error: Error) {
Expand Down Expand Up @@ -65,6 +69,21 @@ const App = (initialProps) => {
});
};

const onLoadMore = () => {
console.log('onLoadMore', listInterActStatus)
if (listInterActStatus != ListInterActStatus.normal) {
return
}
setListInterActStatus(ListInterActStatus.loadMore);
// 模拟加载更多操作
fetchData().then(() => {
setListInterActStatus(ListInterActStatus.normal);
})
.catch(error => {
setListInterActStatus(ListInterActStatus.normal);
});
};

const listView = () => {
if ((responseData?.datas || []).length > 0) {
return <FlatList
Expand All @@ -73,6 +92,8 @@ const App = (initialProps) => {
renderItem={renderItemView}
onRefresh={onRefresh}
refreshing={listInterActStatus === ListInterActStatus.refreshing}
onEndReachedThreshold={0.05}
ListFooterComponent={responseData.over ? <ActivityIndicator/> : null}
/>
} else {
return null;
Expand All @@ -81,7 +102,14 @@ const App = (initialProps) => {

return (
<View style={styles.container}>
<Text>我的收藏-React Native</Text>
<View style={{ flexDirection: 'row', alignItems: 'center'}}>
<TouchableOpacity onPress={()=> {
CloseActivityModule.closeActivity()
}}>
<Image source={require('../collection/image/arrow_black.png')} style={styles.tinyImage} />
</TouchableOpacity>
<Text>我的收藏-React Native</Text>
</View>
<ApiStatus apiStatus={status}
failCallback={fetchData}
errorMsg={errorMsg}
Expand All @@ -102,6 +130,10 @@ const styles = StyleSheet.create({
fontSize: 18,
height: 44,
},
tinyImage: {
width: 18,
height: 18,
},
});

export default App;
23 changes: 5 additions & 18 deletions app/pages/collection/interface.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,11 @@
export interface DataResp {
articleList: any[]
author: string
children: any[]
courseId: number
cover: string
desc: string
id: number
lisense: string
lisenseLink: string
name: string
order: number
parentChapterId: number
type: number
userControlSetTop: boolean
visible: number
}

export interface CollectionData {
curPage: number
datas: CollectionItem[]
offset: number
over: boolean
pageCount: number
size: number
total: number
}

export interface CollectionItem {
Expand Down

0 comments on commit ec93fad

Please sign in to comment.