是否有可接受的样板用于创建在React Native应用程序中使用的本机Android模块。我在创建原生Android模块时遇到的一些问题:
class JobsForCategoryVC: UIViewController {
//MARK:-Outlets
@IBOutlet weak var jobTableView: UITableView!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
//MARK:-Properties
var refreshControl:UIRefreshControl!
var jobCategory:JobCategoryDB!
var pageNumber:Int = 1
var downloadMore:Bool = true
var jobs = [JobModel]()
//MARK:-LifeCycle
override func viewDidLoad() {
super.viewDidLoad()
setupView()
freshDownload()
}
func setupView(){
refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Loading fresh Jobs")
refreshControl.addTarget(self, action: #selector(self.freshDownload), for: .valueChanged)
jobTableView.addSubview(refreshControl)
}
func freshDownload(){
pageNumber = 1
downloadMore = true
downloadJobsFrom(top: true)
}
func downloadJobsFrom(top:Bool){
if !refreshControl.isRefreshing && top{
activityIndicator.startAnimating()
}
let url = URLStringList.getSearchCategoryJobString(pageNumber: pageNumber, categoryId: jobCategory.id!)
if let url = URL(string: url){
Alamofire.request(url, method: .get).responseJSON { (response) in
if response.result.isSuccess{
let json = response.result.value
let model = Mapper<JobModel>().mapArray(JSONArray: json as! [[String : Any]])
if model?.count == 0{
self.downloadMore = false
}
if let jobs = model{
if top{
self.jobs = jobs
}else{
self.jobs += jobs
}
self.jobTableView.reloadData()
self.pageNumber += 1
}
self.refreshControl.endRefreshing()
self.activityIndicator.stopAnimating()
}else{
self.activityIndicator.stopAnimating()
DispatchQueue.main.async(execute: {
self.refreshControl.endRefreshing()
self.jobTableView.reloadData()
})
if top{
showInternetConnectionAlert(viewController: self, activityIndicator: self.activityIndicator, completion: nil)
}
}
}
}
}
}
extension JobsForCategoryVC:UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if jobs.count > 0 {
jobTableView.backgroundView = nil
let cellCount = jobs.count + ((jobs.count-1)/(AdForNumberOfCells-1)) + 1
return cellCount
}
jobTableView.backgroundView = Bundle.main.loadNibNamed("PullToRefreshView", owner: nil, options: nil)?.first as? PullToRefreshView
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row % AdForNumberOfCells == 0{
if let cell = tableView.dequeueReusableCell(withIdentifier: "JobsAdTableViewCell", for: indexPath) as? JobsAdTableViewCell{
cell.controller = self
return cell
}
}else{
if let cell = tableView.dequeueReusableCell(withIdentifier: "JobsTableViewCell", for: indexPath) as? JobsTableViewCell{
let index = NSIndexPath(item: indexPath.row-(indexPath.row/AdForNumberOfCells)-1, section: 0)
cell.configure(job: jobs[index.row])
return cell
}
}
return UITableViewCell()
}
}
extension JobsForCategoryVC:UITableViewDelegate{
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let webView = storyboard?.instantiateViewController(withIdentifier: "WKWebVC") as? WKWebVC{
if indexPath.row % AdForNumberOfCells == 0 {
return
}
let index = NSIndexPath(item: indexPath.row-(indexPath.row/AdForNumberOfCells)-1, section: 0)
if let urlString = jobs[index.row].url{
webView.url = urlString
webView.titleString = jobs[index.row].title
present(webView, animated: true, completion: nil)
}
}
}
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if indexPath.row == self.jobs.count - 1 && downloadMore{
downloadJobsFrom(top: false)
}
}
}
模块,它们具有类似的设置。 app
build.gradle文件是否会覆盖其他本机模块build.gradle文件,并用于构建所有本机模块或根据其自己的build.gradle文件构建的每个本机模块请分享您对以上任何/所有内容的想法/见解。谢谢!
答案 0 :(得分:0)
我是反应原生的新手,我最初遇到了不知道如何生成Android / iOS原生模块的问题。
我在其他示例代码中看到了它们,并且最初尝试复制它们并清理它们,但我知道/觉得我做错了。
然后我回过头来注意到这个文档(https://facebook.github.io/react-native/docs/getting-started.html)中有一个“快速启动”选项卡和[你想要的]一个“用本机代码构建项目”选项卡。
“使用本机代码构建项目”选项卡会向您显示react-native init AwesomeProject
,这是生成样板Android和iOS本机模块的秘诀。
对此我不熟悉,我仍然在寻找一个选项来生成Android / iOS样板,并且没有 BUCK支持。