Skip to content

Commit ead45b7

Browse files
committed
基础框架,Android模块
1 parent b4c4436 commit ead45b7

25 files changed

+328
-48
lines changed

app/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ dependencies {
6565
kapt 'com.airbnb:deeplinkdispatch-processor:2.0.1'
6666

6767

68+
compile 'com.github.githubwing:ByeBurger:1.2.2'
6869
kapt 'com.android.databinding:compiler:1.0-rc5'
6970
// Kotlin
7071
// compile dependencies.kotlinStdlib
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.wingsofts.gankclient
22

33
import android.app.Application
4+
import com.wingsofts.gankclient.di.component.ApiComponent
45
import com.wingsofts.gankclient.di.component.DaggerApiComponent
56
import com.wingsofts.gankclient.di.module.ApiModule
67
import com.wingsofts.gankclient.di.module.AppModule
@@ -10,20 +11,21 @@ import javax.inject.Inject
1011
/**
1112
* Created by wing on 16-11-22.
1213
*/
13-
class App :Application(){
14-
init {
15-
instance = this
16-
}
17-
@Inject lateinit var mRetrofit :Retrofit
14+
class App : Application() {
15+
init {
16+
instance = this
17+
}
18+
19+
@Inject lateinit var apiComponent: ApiComponent
1820
override fun onCreate() {
1921
super.onCreate()
2022

2123
DaggerApiComponent.builder().apiModule(ApiModule()).appModule(AppModule(this)).build().inject(this)
2224
}
2325

2426

25-
companion object{
26-
lateinit var instance : App
27+
companion object {
28+
lateinit var instance: App
2729

28-
}
30+
}
2931
}

app/src/main/java/com/wingsofts/gankclient/api/GankApi.kt

+5-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.wingsofts.gankclient.api
33
import com.wingsofts.gankclient.bean.FuckFood
44
import com.wingsofts.gankclient.bean.JsonResult
55
import retrofit2.http.GET
6+
import retrofit2.http.Path
67
import rx.Observable
78

89
/**
@@ -11,8 +12,9 @@ import rx.Observable
1112
interface GankApi{
1213

1314
/**
14-
* 手气不错 随机接口
15+
* Android所有数据
1516
*/
16-
@GET("random/data/福利/20")
17-
fun getData():Observable<JsonResult<List<FuckFood>>>
17+
@GET("data/Android/10/{page}")
18+
fun getAndroidData(@Path("page") page:Int):Observable<JsonResult<List<FuckFood>>>
19+
1820
}

app/src/main/java/com/wingsofts/gankclient/bean/FuckFood.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,9 @@ data class FuckFood(
1717
val used: Boolean,
1818
val who: String
1919

20+
){
21+
fun hasImg():Boolean {
22+
return images != null
23+
}
2024

21-
)
25+
}

app/src/main/java/com/wingsofts/gankclient/bean/JsonResult.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ package com.wingsofts.gankclient.bean
44
* Created by wing on 11/23/16.
55
*/
66
class JsonResult<T>(val error :Boolean,
7-
val results:T)
7+
val results:T){
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.wingsofts.gankclient.di.component
2+
3+
import com.wingsofts.gankclient.mvp.contract.AndroidContract
4+
import com.wingsofts.gankclient.ui.fragment.AndroidFragment
5+
import dagger.Module
6+
import dagger.Provides
7+
import dagger.Subcomponent
8+
9+
/**
10+
* Created by wing on 16-11-24.
11+
*/
12+
@Subcomponent(modules = arrayOf(AndroidModule::class))
13+
interface AndroidComponent {
14+
fun inject(fragment: AndroidFragment)
15+
}
16+
17+
@Module
18+
class AndroidModule(private val mView: AndroidContract.View){
19+
@Provides fun getView() = mView
20+
}

app/src/main/java/com/wingsofts/gankclient/di/component/ApiComponent.kt

+3
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,8 @@ interface ApiComponent{
1212

1313
fun inject(app: App)
1414

15+
16+
fun plus(module:AndroidModule):AndroidComponent
17+
1518
}
1619

app/src/main/java/com/wingsofts/gankclient/di/module/ApiModule.kt

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.content.Context
44
import android.util.Log
55
import com.google.gson.Gson
66
import com.google.gson.GsonBuilder
7+
import com.wingsofts.gankclient.api.GankApi
78
import dagger.Module
89
import dagger.Provides
910
import okhttp3.Cache
@@ -48,5 +49,7 @@ class ApiModule {
4849
}
4950

5051
@Provides fun provideGson() = GsonBuilder().create()
52+
53+
@Provides fun provideApi(retrofit:Retrofit) = retrofit.create(GankApi::class.java)
5154
}
5255

Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package com.wingsofts.gankclient
22

33
import android.content.Context
4+
import android.widget.Toast
45
import com.wingsofts.gankclient.api.GankApi
56

67
/**
78
* Created by wing on 11/23/16.
89
*/
9-
fun Context.createApi():GankApi{
10-
return App.instance.mRetrofit.create(GankApi::class.java)
10+
fun Context.getMainComponent() = App.instance.apiComponent
11+
12+
fun Context.toast(msg:String,length:Int = Toast.LENGTH_SHORT){
13+
Toast.makeText(this,msg,length)
1114
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.wingsofts.gankclient.mvp.contract
2+
3+
import com.wingsofts.gankclient.bean.FuckFood
4+
import com.wingsofts.gankclient.bean.JsonResult
5+
import rx.Observable
6+
7+
/**
8+
* Created by wing on 16-11-24.
9+
*/
10+
interface AndroidContract {
11+
interface View {
12+
fun setData(results: List<FuckFood>)
13+
14+
}
15+
16+
interface Model {
17+
18+
fun getData(page: Int): Observable<JsonResult<List<FuckFood>>>
19+
}
20+
21+
interface Presenter {
22+
23+
fun getData(page: Int)
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.wingsofts.gankclient.mvp.model
2+
3+
import com.wingsofts.gankclient.api.GankApi
4+
import com.wingsofts.gankclient.bean.FuckFood
5+
import com.wingsofts.gankclient.bean.JsonResult
6+
import com.wingsofts.gankclient.mvp.contract.AndroidContract
7+
import rx.Observable
8+
import javax.inject.Inject
9+
10+
/**
11+
* Created by wing on 16-11-24.
12+
*/
13+
class AndroidModel
14+
15+
@Inject constructor(private val api : GankApi) : AndroidContract.Model{
16+
override fun getData(page:Int): Observable<JsonResult<List<FuckFood>>> {
17+
return api.getAndroidData(page)
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.wingsofts.gankclient.mvp.presenter
2+
3+
import android.util.Log
4+
import com.wingsofts.gankclient.mvp.contract.AndroidContract
5+
import com.wingsofts.gankclient.mvp.model.AndroidModel
6+
import rx.android.schedulers.AndroidSchedulers
7+
import javax.inject.Inject
8+
9+
/**
10+
* Created by wing on 16-11-24.
11+
*/
12+
class AndroidPresenter
13+
@Inject constructor(private val mModel: AndroidModel,
14+
private val mView: AndroidContract.View)
15+
: AndroidContract.Presenter, BasePresenter() {
16+
17+
18+
override fun getData(page: Int) {
19+
addSubscription(mModel.getData(page).observeOn(AndroidSchedulers.mainThread())
20+
.subscribe({
21+
22+
res ->
23+
if (!res.error) {
24+
mView.setData(res.results)
25+
}
26+
27+
}, { e -> Log.e("wing", "error android Presenter" + e.message) }))
28+
}
29+
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.wingsofts.gankclient.mvp.presenter
2+
3+
import rx.Subscriber
4+
import rx.Subscription
5+
import rx.subscriptions.CompositeSubscription
6+
7+
/**
8+
* Created by wing on 16-11-24.
9+
*/
10+
open class BasePresenter {
11+
var compositeSubscription = CompositeSubscription()
12+
13+
protected fun addSubscription(subscription: Subscription) {
14+
compositeSubscription.add(subscription)
15+
}
16+
17+
fun unSubscribe() {
18+
if(compositeSubscription.hasSubscriptions()){
19+
compositeSubscription.unsubscribe()
20+
}
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.wingsofts.gankclient.ui.activity
2+
3+
import android.databinding.ViewDataBinding
4+
import android.os.Bundle
5+
import android.support.v7.app.AppCompatActivity
6+
7+
/**
8+
* Created by wing on 16-11-24.
9+
*/
10+
abstract class BaseBindingActivity<B : ViewDataBinding> : AppCompatActivity() {
11+
12+
13+
lateinit var mBinding: B
14+
override fun onCreate(savedInstanceState: Bundle?) {
15+
super.onCreate(savedInstanceState)
16+
17+
mBinding = createDataBinding(savedInstanceState)
18+
19+
initView()
20+
}
21+
22+
abstract fun initView()
23+
24+
abstract fun createDataBinding(savedInstanceState: Bundle?): B
25+
}
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,61 @@
11
package com.wingsofts.gankclient.ui.activity
22

3-
import android.content.Intent
4-
import android.content.Intent.ACTION_VIEW
5-
import android.net.Uri
6-
import android.support.v7.app.AppCompatActivity
3+
import android.databinding.DataBindingUtil
74
import android.os.Bundle
8-
import android.support.v7.widget.LinearLayoutManager
9-
import android.util.Log
10-
import android.widget.Toast
11-
import com.wingsofts.gankclient.App
5+
import android.support.v4.app.Fragment
6+
import android.support.v4.app.FragmentPagerAdapter
7+
import android.view.MenuItem
128
import com.wingsofts.gankclient.R
13-
import com.wingsofts.gankclient.createApi
14-
import com.wingsofts.gankclient.router.GankClientUri
15-
import com.wingsofts.gankclient.router.GankRouter
16-
import com.wingsofts.gankclient.ui.adapter.FuckFoodAdapter
9+
import com.wingsofts.gankclient.databinding.ActivityMainBinding
10+
import com.wingsofts.gankclient.ui.fragment.AndroidFragment
11+
import com.wingsofts.gankclient.ui.fragment.FragmentHolder
1712
import kotlinx.android.synthetic.main.activity_main.*
18-
import okhttp3.OkHttpClient
19-
import rx.android.schedulers.AndroidSchedulers
13+
import java.util.*
2014

21-
class MainActivity : AppCompatActivity() {
15+
class MainActivity : BaseBindingActivity<ActivityMainBinding>() {
16+
lateinit var mFragments: MutableList<Fragment>
17+
var mPreItem : MenuItem? = null
18+
override fun createDataBinding(savedInstanceState: Bundle?): ActivityMainBinding {
19+
return DataBindingUtil.setContentView(this, R.layout.activity_main)
20+
}
21+
22+
override fun initView() {
23+
initFragments()
24+
25+
viewPager.adapter = object : FragmentPagerAdapter(supportFragmentManager) {
26+
override fun getItem(position: Int) = mFragments[position]
27+
28+
override fun getCount() = mFragments.size
29+
30+
}
31+
32+
33+
navigationView.setOnNavigationItemSelectedListener { item ->
34+
var tab = 0
35+
when (item.itemId) {
36+
R.id.menu_android -> tab = 0
37+
R.id.menu_ios -> tab = 1
38+
R.id.menu_girl -> tab = 2
39+
R.id.menu_about -> tab = 3
40+
}
41+
viewPager.currentItem = tab
42+
false
43+
}
2244

23-
override fun onCreate(savedInstanceState: Bundle?) {
24-
super.onCreate(savedInstanceState)
25-
setContentView(R.layout.activity_main)
2645

46+
}
47+
48+
private fun initFragments() {
49+
mFragments = ArrayList()
50+
51+
mFragments.add(AndroidFragment.newInstance())
52+
53+
mFragments.add(FragmentHolder())
2754

55+
mFragments.add(FragmentHolder())
56+
57+
mFragments.add(FragmentHolder())
2858
}
59+
60+
2961
}

app/src/main/java/com/wingsofts/gankclient/ui/adapter/FuckFoodAdapter.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,23 @@ import android.view.LayoutInflater
55
import android.view.ViewGroup
66
import com.wingsofts.gankclient.bean.FuckFood
77
import com.wingsofts.gankclient.databinding.ActivityMainBinding
8-
import com.wingsofts.gankclient.databinding.ItemRandomBinding
8+
import com.wingsofts.gankclient.databinding.ItemFuckfoodBinding
99

1010
/**
1111
* Created by wing on 11/23/16.
1212
*/
13-
class FuckFoodAdapter(private val mList: List<FuckFood>) : RecyclerView.Adapter<DataBoundViewHolder<ItemRandomBinding>>() {
13+
class FuckFoodAdapter(private val mList: List<FuckFood>) : RecyclerView.Adapter<DataBoundViewHolder<ItemFuckfoodBinding>>() {
1414
override fun getItemCount(): Int {
1515
return mList.size
1616
}
1717

18-
override fun onBindViewHolder(holder: DataBoundViewHolder<ItemRandomBinding>, position: Int) {
18+
override fun onBindViewHolder(holder: DataBoundViewHolder<ItemFuckfoodBinding>, position: Int) {
1919
holder.binding.fuckfood = mList[position]
2020
}
2121

2222
override fun onCreateViewHolder(parent: ViewGroup,
23-
viewType: Int): DataBoundViewHolder<ItemRandomBinding> {
23+
viewType: Int): DataBoundViewHolder<ItemFuckfoodBinding> {
2424
return DataBoundViewHolder(
25-
ItemRandomBinding.inflate(LayoutInflater.from(parent.context), parent, false))
25+
ItemFuckfoodBinding.inflate(LayoutInflater.from(parent.context), parent, false))
2626
}
2727
}

0 commit comments

Comments
 (0)