فهرست منبع

列表数据OK

allen 4 سال پیش
والد
کامیت
085afd5343

+ 12 - 8
build.gradle

@@ -62,9 +62,10 @@ buildscript {
             /**
             /**
              * 依赖仓储
              * 依赖仓储
              */
              */
-            jcenter()
-            mavenCentral()
-            google()
+            maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
+            maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
+            maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
+            maven { url 'https://jitpack.io' }
         }
         }
         /**
         /**
          * Gradle插件
          * Gradle插件
@@ -97,11 +98,14 @@ buildscript {
  */
  */
 allprojects {
 allprojects {
     repositories {
     repositories {
-        google()
-        jcenter()
-        mavenCentral()
-        maven { url 'https://dl.bintray.com/geamtear/maven' }
-        maven { url "https://jitpack.io" }
+        maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
+        maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
+        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
+        maven { url 'https://jitpack.io' }
+    }
+    tasks.withType(Javadoc) { // 新增
+        options.addStringOption('Xdoclint:none', '-quiet')
+        options.addStringOption('encoding', 'UTF-8')
     }
     }
 }
 }
 
 

+ 31 - 1
doc/readme.md

@@ -1 +1,31 @@
-### okok
+## 增加hello模块
+### 清理AndroidManifest.xml
+### 清理res
+#### 仅留下layout和values
+增加完成layout后,需要Build->编译模块,以自动生成databinding
+### 增加三个包activity,di,launch。如果有fragment应当增加fragment包
+#### launch为模块启动入口
+#### di中注入这个模块的Activity和Fragment
+
+## 操作middleware模块
+### api包,增加HelloApi类,用于HTTP通讯
+在ApiManager中增加项
+### model包,如有必要在此包增加对象
+### logic包
+#### 两个大包,contract和presenter,分别建立对应hello模块的hello包
+一个是接口,一个是实现
+这里主要实现Presenter中的loadData
+HelloActivityPresenter重要
+在此类中使用api,实现Contract
+定义observer,其中覆写onNextWithConnection方法,实现json到对象的转换
+### di包,PresenterComponent类增加注入
+
+
+### 列表操作
+activity中增加HelloListActivity.kt
+res.layout中增加hello_list_act_lay.xml和hello_list_item_lay.xml
+HelloComponent中增加inject
+增加adapter包
+在AndroidManifest.xml中增加这个Activity
+middleware.logic.contract.hello增加HelloListActivityContract
+middleware.logic.presenter.hello增加HelloListActivityPresenter

+ 1 - 0
hello/src/main/AndroidManifest.xml

@@ -7,6 +7,7 @@
         android:supportsRtl="true">
         android:supportsRtl="true">
         <activity android:name=".activity.HelloActivity">
         <activity android:name=".activity.HelloActivity">
         </activity>
         </activity>
+        <activity android:name=".activity.HelloListActivity"></activity>
     </application>
     </application>
 
 
 </manifest>
 </manifest>

+ 111 - 0
hello/src/main/java/com/wdkl/ncs/android/component/hello/activity/HelloListActivity.kt

@@ -0,0 +1,111 @@
+package com.wdkl.ncs.android.component.hello.activity
+
+import android.util.Log
+import com.alibaba.android.vlayout.DelegateAdapter
+import com.alibaba.android.vlayout.VirtualLayoutManager
+import com.enation.javashop.android.jrouter.external.annotation.Autowired
+import com.enation.javashop.android.jrouter.external.annotation.Router
+import com.enation.javashop.net.engine.model.NetState
+import com.scwang.smartrefresh.layout.footer.ClassicsFooter
+import com.wdkl.ncs.android.component.hello.R
+import com.wdkl.ncs.android.component.hello.adapter.HelloItemAdapter
+import com.wdkl.ncs.android.component.hello.databinding.HelloListActLayBinding
+import com.wdkl.ncs.android.component.hello.launch.HelloLaunch
+import com.wdkl.ncs.android.lib.base.BaseActivity
+import com.wdkl.ncs.android.lib.utils.pop
+import com.wdkl.ncs.android.lib.utils.push
+import com.wdkl.ncs.android.lib.utils.showMessage
+import com.wdkl.ncs.android.middleware.logic.contract.hello.HelloListActivityContract
+import com.wdkl.ncs.android.middleware.logic.presenter.hello.HelloListActivityPresenter
+import com.wdkl.ncs.android.middleware.model.ShopItem
+import kotlinx.android.synthetic.main.hello_list_act_lay.*
+
+@Router(path = "/hello/list")
+class HelloListActivity : BaseActivity<HelloListActivityPresenter, HelloListActLayBinding>(), HelloListActivityContract.View {
+    override fun bindDagger() {
+        HelloLaunch.component.inject(this)
+    }
+
+    override fun onError(message: String, type: Int) {
+        dismissDialog()
+        showMessage(message)
+    }
+
+    override fun complete(message: String, type: Int) {
+        dismissDialog()
+        showMessage(message)
+    }
+
+    override fun start() {
+        showDialog()
+    }
+
+    override fun networkMonitor(state: NetState) {
+
+    }
+
+    override fun destory() {
+
+    }
+
+    private var page :Int = 1
+    private val adapter = HelloItemAdapter(ArrayList())
+
+    //@Autowired(name= "keyword",required = true)
+    @JvmField var keyword: String = "8"
+
+    private lateinit var virtualLayoutManager: VirtualLayoutManager
+
+    private lateinit var delegateAdapter: DelegateAdapter
+
+    override fun getLayId(): Int {
+        return R.layout.hello_list_act_lay
+    }
+
+    override fun init() {
+        /**初始化LayoutMannager*/
+        virtualLayoutManager = VirtualLayoutManager(this.activity)
+
+        /**初始化适配器*/
+        delegateAdapter = DelegateAdapter(virtualLayoutManager)
+        delegateAdapter.addAdapter(adapter)
+        mViewBinding.refresh.setRefreshFooter(ClassicsFooter(activity))
+        /**配置到RecycleView*/
+        listView.layoutManager = virtualLayoutManager
+        listView.adapter = delegateAdapter
+        presenter.loadData(keyword,page)
+    }
+
+    override fun bindEvent() {
+        refresh.setOnLoadMoreListener {
+            page += 1
+            presenter.loadData(keyword,page)
+        }
+//        adapter.setOnItemClickListener { data, _ ->
+//            push("/shop/detail",{postcard ->
+//                postcard.withInt("shopId", data.shopId)
+//            })
+//        }
+    }
+
+    override fun render(data: ArrayList<ShopItem>) {
+        if (page == 1){
+            refresh.resetNoMoreData()
+            if (data.size >0){
+                adapter.data.clear()
+                adapter.data.addAll(data)
+                Log.i("abc1"," " + data.size);
+                adapter.notifyDataSetChanged()
+            }
+            refresh.finishLoadMore()
+        }else {
+            if (data.size > 0) {
+                adapter.data.addAll(data)
+                adapter.notifyDataSetChanged()
+                refresh.finishLoadMore()
+            }else{
+                refresh.finishLoadMoreWithNoMoreData()
+            }
+        }
+    }
+}

+ 44 - 0
hello/src/main/java/com/wdkl/ncs/android/component/hello/adapter/HelloItemAdapter.kt

@@ -0,0 +1,44 @@
+package com.wdkl.ncs.android.component.hello.adapter
+
+import android.util.Log
+import android.view.View
+import android.view.ViewGroup
+import com.alibaba.android.vlayout.LayoutHelper
+import com.alibaba.android.vlayout.layout.LinearLayoutHelper
+import com.wdkl.ncs.android.component.hello.R
+import com.wdkl.ncs.android.component.hello.databinding.HelloListItemLayBinding
+import com.wdkl.ncs.android.lib.adapter.BaseDelegateAdapter
+import com.wdkl.ncs.android.lib.utils.BaseRecyclerViewHolder
+import com.wdkl.ncs.android.middleware.model.ShopItem
+import kotlinx.android.synthetic.main.hello_list_item_lay.view.*
+
+class HelloItemAdapter(val data:ArrayList<ShopItem>) : BaseDelegateAdapter<BaseRecyclerViewHolder<HelloListItemLayBinding>,ShopItem>(){
+    override fun dataProvider(): Any {
+        return data
+    }
+
+    override fun itemFilter(position: Int): Boolean {
+        return true
+    }
+
+    override fun getItemCount(): Int {
+        return data.size
+    }
+
+    override fun onCreateLayoutHelper(): LayoutHelper {
+        Log.i("abc",data.toString());
+        return LinearLayoutHelper(0,data.size)
+    }
+
+    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): BaseRecyclerViewHolder<HelloListItemLayBinding> {
+        return BaseRecyclerViewHolder.build(parent, R.layout.hello_list_item_lay)
+    }
+
+    override fun onBindViewHolder(holder: BaseRecyclerViewHolder<HelloListItemLayBinding>?, position: Int) {
+        holder?.bind {
+            binding ->
+            val itemData = getItem(position)
+            binding.helloListItemTv.text = itemData.shopName
+        }
+    }
+}

+ 2 - 0
hello/src/main/java/com/wdkl/ncs/android/component/hello/di/HelloComponent.kt

@@ -1,10 +1,12 @@
 package com.wdkl.ncs.android.component.hello.di
 package com.wdkl.ncs.android.component.hello.di
 
 
 import com.wdkl.ncs.android.component.hello.activity.HelloActivity
 import com.wdkl.ncs.android.component.hello.activity.HelloActivity
+import com.wdkl.ncs.android.component.hello.activity.HelloListActivity
 import com.wdkl.ncs.android.middleware.di.ApplicationComponent
 import com.wdkl.ncs.android.middleware.di.ApplicationComponent
 import dagger.Component
 import dagger.Component
 
 
 @Component(dependencies = arrayOf(ApplicationComponent::class))
 @Component(dependencies = arrayOf(ApplicationComponent::class))
 interface HelloComponent{
 interface HelloComponent{
     fun inject(activity: HelloActivity)
     fun inject(activity: HelloActivity)
+    fun inject(activity: HelloListActivity)
 }
 }

+ 30 - 0
hello/src/main/res/layout/hello_list_act_lay.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout>
+    <android.support.constraint.ConstraintLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        xmlns:bind="http://schemas.android.com/apk/res-auto"
+        xmlns:app="http://schemas.android.com/apk/res-auto">
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="20sp"
+            android:text="@string/app_name"/>
+
+        <com.scwang.smartrefresh.layout.SmartRefreshLayout
+            android:id="@+id/refresh"
+            android:layout_width="match_parent"
+            bind:srlEnableRefresh="true"
+            bind:srlEnableLoadMore="true"
+            android:layout_height="match_parent"
+            >
+            <android.support.v7.widget.RecyclerView
+                android:id="@+id/listView"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                ></android.support.v7.widget.RecyclerView>
+        </com.scwang.smartrefresh.layout.SmartRefreshLayout>
+
+    </android.support.constraint.ConstraintLayout>
+</layout>

+ 30 - 0
hello/src/main/res/layout/hello_list_item_lay.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout>
+    <android.support.constraint.ConstraintLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        xmlns:app="http://schemas.android.com/apk/res-auto">
+        <android.support.constraint.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintDimensionRatio="h,5:1">
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/app_name"/>
+            <TextView
+                android:id="@+id/hello_list_item_tv"
+                android:layout_width="match_parent"
+                android:layout_height="20sp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                android:textSize="15sp"
+                android:gravity="center_vertical"
+                android:textColor="@color/javashop_color_white"
+                android:background="#77000000"
+                />
+        </android.support.constraint.ConstraintLayout>
+    </android.support.constraint.ConstraintLayout>
+</layout>

+ 3 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/fragment/HomeFragment.kt

@@ -221,7 +221,7 @@ class HomeFragment : BaseFragment<HomeFragmentPresenter,HomeFragLayBinding>(),Ho
     }
     }
 
 
     override fun secKill() {
     override fun secKill() {
-        push("/promotion/seckill/main")
+        //push("/promotion/seckill/main")
     }
     }
 
 
     override fun groupMall() {
     override fun groupMall() {
@@ -229,7 +229,8 @@ class HomeFragment : BaseFragment<HomeFragmentPresenter,HomeFragLayBinding>(),Ho
     }
     }
 
 
     override fun couponHall() {
     override fun couponHall() {
-        push("/promotion/coupon/hall")
+        //push("/promotion/coupon/hall")
+        push("/hello/list")
     }
     }
 
 
     override fun toShop(id: Int) {
     override fun toShop(id: Int) {

+ 2 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/di/PresenterComponent.kt

@@ -2,6 +2,7 @@ package com.wdkl.ncs.android.middleware.di
 
 
 import com.wdkl.ncs.android.middleware.logic.presenter.extra.ScanPresenter
 import com.wdkl.ncs.android.middleware.logic.presenter.extra.ScanPresenter
 import com.wdkl.ncs.android.middleware.logic.presenter.hello.HelloActivityPresenter
 import com.wdkl.ncs.android.middleware.logic.presenter.hello.HelloActivityPresenter
+import com.wdkl.ncs.android.middleware.logic.presenter.hello.HelloListActivityPresenter
 import com.wdkl.ncs.android.middleware.logic.presenter.home.CategoryFragmentPresenter
 import com.wdkl.ncs.android.middleware.logic.presenter.home.CategoryFragmentPresenter
 import com.wdkl.ncs.android.middleware.logic.presenter.home.HomeActivityPresenter
 import com.wdkl.ncs.android.middleware.logic.presenter.home.HomeActivityPresenter
 import com.wdkl.ncs.android.middleware.logic.presenter.home.HomeFragmentPresenter
 import com.wdkl.ncs.android.middleware.logic.presenter.home.HomeFragmentPresenter
@@ -48,4 +49,5 @@ interface PresenterComponent {
 
 
     fun inject(presenter: HelloActivityPresenter)
     fun inject(presenter: HelloActivityPresenter)
 
 
+    fun inject(presenter: HelloListActivityPresenter)
 }
 }

+ 14 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/logic/contract/hello/HelloListActivityContract.kt

@@ -0,0 +1,14 @@
+package com.wdkl.ncs.android.middleware.logic.contract.hello
+
+import com.wdkl.ncs.android.lib.base.BaseContract
+import com.wdkl.ncs.android.middleware.model.ChildCategoryShell
+import com.wdkl.ncs.android.middleware.model.ShopItem
+
+interface HelloListActivityContract{
+    interface View : BaseContract.BaseView{
+        fun render(data: ArrayList<ShopItem>)
+    }
+    interface Presenter : BaseContract.BasePresenter{
+        fun loadData(keyWord :String ,page : Int)
+    }
+}

+ 56 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/logic/presenter/hello/HelloListActivityPresenter.kt

@@ -0,0 +1,56 @@
+package com.wdkl.ncs.android.middleware.logic.presenter.hello
+
+import com.enation.javashop.net.engine.plugin.connection.ConnectionQuality
+import com.enation.javashop.net.engine.plugin.exception.ExceptionHandle
+import com.enation.javashop.net.engine.utils.ThreadFromUtils
+import com.wdkl.ncs.android.lib.base.RxPresenter
+import com.wdkl.ncs.android.lib.utils.ConnectionObserver
+import com.wdkl.ncs.android.lib.utils.arrayObjects
+import com.wdkl.ncs.android.lib.utils.toJsonObject
+import com.wdkl.ncs.android.lib.utils.valueJsonArray
+import com.wdkl.ncs.android.middleware.api.ShopApi
+import com.wdkl.ncs.android.middleware.di.MiddlewareDaggerComponent
+import com.wdkl.ncs.android.middleware.logic.contract.hello.HelloListActivityContract
+import com.wdkl.ncs.android.middleware.model.ShopItem
+import io.reactivex.disposables.Disposable
+import javax.inject.Inject
+
+class HelloListActivityPresenter @Inject constructor(): RxPresenter<HelloListActivityContract.View>(),HelloListActivityContract.Presenter{
+    override fun bindDagger() {
+        MiddlewareDaggerComponent.component.inject(this)
+    }
+    @Inject
+    protected lateinit var shopApi: ShopApi
+
+    private val observer = object : ConnectionObserver<Any>(){
+        override fun onStartWithConnection() {
+            providerView().start()
+        }
+
+        override fun onNextWithConnection(result: Any, connectionQuality: ConnectionQuality) {
+            providerView().complete("")
+            providerView().render(result as ArrayList<ShopItem>)
+        }
+
+        override fun onErrorWithConnection(error: ExceptionHandle.ResponeThrowable, connectionQuality: ConnectionQuality) {
+            providerView().onError(error.customMessage)
+        }
+
+        override fun attachSubscribe(var1: Disposable) {
+            addDisposable(var1)
+        }
+    }
+
+    override fun loadData(keyWord: String, page: Int) {
+        shopApi.getShopList(page,10,keyWord)
+                .map {
+                    var shop = ArrayList<ShopItem>()
+                    it.toJsonObject().valueJsonArray("data").arrayObjects().forEach({ dic ->
+                        shop.add(ShopItem.map( dic))
+                    })
+                    return@map shop
+                }
+                .compose(ThreadFromUtils.defaultSchedulers())
+                .subscribe(observer)
+    }
+}