Prechádzať zdrojové kódy

Added recycler view to show latest users

sirekanyan 8 rokov pred
rodič
commit
49d628c77a

+ 11 - 2
app/src/main/java/me/vadik/knigopis/MainActivity.kt

@@ -3,6 +3,8 @@ package me.vadik.knigopis
 import android.os.Bundle
 import android.support.design.widget.BottomNavigationView
 import android.support.v7.app.AppCompatActivity
+import android.support.v7.widget.LinearLayoutManager
+import android.support.v7.widget.RecyclerView
 import android.view.MenuItem
 import retrofit2.Call
 import retrofit2.Callback
@@ -11,6 +13,8 @@ import retrofit2.Response
 class MainActivity : AppCompatActivity() {
 
   private val api by lazy { app().retrofit.create(Endpoint::class.java) }
+  private val recyclerView by lazy { findViewById(R.id.recycler_view) as RecyclerView }
+  private val users = mutableListOf<User>()
 
   private val onNavigationItemSelectedListener = { item: MenuItem ->
     supportActionBar!!.setTitle(when (item.itemId) {
@@ -27,10 +31,15 @@ class MainActivity : AppCompatActivity() {
     setContentView(R.layout.activity_main)
     val navigation = findViewById(R.id.navigation) as BottomNavigationView
     navigation.setOnNavigationItemSelectedListener(onNavigationItemSelectedListener)
+    val adapter = UsersAdapter(users)
+    recyclerView.adapter = adapter
+    recyclerView.layoutManager = LinearLayoutManager(this)
     api.latestUsers().enqueue(object : Callback<Map<String, User>> {
       override fun onResponse(call: Call<Map<String, User>>?, response: Response<Map<String, User>>?) {
-        response?.body()?.forEach { (_, user) ->
-          logw(user.nickname)
+        users.clear()
+        response?.body()?.values?.forEach { user ->
+          users.add(user)
+          adapter.notifyItemInserted(0)
         }
       }
 

+ 8 - 1
app/src/main/java/me/vadik/knigopis/User.kt

@@ -5,4 +5,11 @@ class User(
     val nickname: String,
     val booksCount: Int,
     val updatedAt: String
-)
+) {
+
+  val color: Int
+    get() {
+      val alpha = Math.min(0xff, booksCount)
+      return alpha shl 24
+    }
+}

+ 10 - 0
app/src/main/java/me/vadik/knigopis/UserViewHolder.kt

@@ -0,0 +1,10 @@
+package me.vadik.knigopis
+
+import android.support.v7.widget.RecyclerView.ViewHolder
+import android.view.View
+import android.widget.TextView
+
+class UserViewHolder(rootView: View) : ViewHolder(rootView) {
+  val userName: TextView = rootView.findViewById(R.id.user_name)
+  val bookCount: TextView = rootView.findViewById(R.id.book_count)
+}

+ 19 - 0
app/src/main/java/me/vadik/knigopis/UsersAdapter.kt

@@ -0,0 +1,19 @@
+package me.vadik.knigopis
+
+import android.support.v7.widget.RecyclerView
+import android.view.ViewGroup
+
+class UsersAdapter(private val users: List<User>) : RecyclerView.Adapter<UserViewHolder>() {
+
+  override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
+      UserViewHolder(parent.inflate(R.layout.user))
+
+  override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
+    val user = users[position]
+    holder.userName.text = user.nickname
+    holder.bookCount.text = user.booksCount.toString()
+    holder.bookCount.setTextColor(user.color)
+  }
+
+  override fun getItemCount() = users.size
+}

+ 9 - 2
app/src/main/java/me/vadik/knigopis/extensions.kt

@@ -1,12 +1,19 @@
 package me.vadik.knigopis
 
 import android.app.Activity
+import android.support.annotation.LayoutRes
 import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
 
 private const val TAG = "Knigopis"
 
 fun Activity.app() = application as App
 
-fun Activity.logw(message: String) = Log.w(TAG, message)
+fun logw(message: String) = Log.w(TAG, message)
 
-fun Activity.log(message: String, throwable: Throwable?) = Log.e(TAG, message, throwable)
+fun log(message: String, throwable: Throwable?) = Log.e(TAG, message, throwable)
+
+fun ViewGroup.inflate(@LayoutRes layout: Int): View =
+    LayoutInflater.from(context).inflate(layout, this, false)

+ 4 - 15
app/src/main/res/layout/activity_main.xml

@@ -9,23 +9,12 @@
     android:orientation="vertical"
     tools:context="me.vadik.knigopis.MainActivity">
 
-    <FrameLayout
-        android:id="@+id/content"
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/recycler_view"
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        android:layout_weight="1">
-
-        <TextView
-            android:id="@+id/message"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="@dimen/activity_vertical_margin"
-            android:layout_marginLeft="@dimen/activity_horizontal_margin"
-            android:layout_marginRight="@dimen/activity_horizontal_margin"
-            android:layout_marginTop="@dimen/activity_vertical_margin"
-            android:text="@string/title_home"/>
-
-    </FrameLayout>
+        android:layout_weight="1"
+        tools:listitem="@layout/user"/>
 
     <android.support.design.widget.BottomNavigationView
         android:id="@+id/navigation"

+ 23 - 0
app/src/main/res/layout/user.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <TextView
+        android:id="@+id/user_name"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:padding="16dp"
+        tools:text="Вася Пупкин"/>
+
+    <TextView
+        android:id="@+id/book_count"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:padding="16dp"
+        tools:text="100"/>
+
+</LinearLayout>

+ 1 - 1
app/src/main/res/values-ru/strings.xml

@@ -1,6 +1,6 @@
 <resources>
     <string name="app_name">Книгопись</string>
-    <string name="title_home">Home</string>
+    <string name="title_home">Новые</string>
     <string name="title_dashboard">Dashboard</string>
     <string name="title_notifications">Notifications</string>
 </resources>

+ 1 - 1
app/src/main/res/values/strings.xml

@@ -1,6 +1,6 @@
 <resources>
     <string name="app_name">Knigopis</string>
-    <string name="title_home">Home</string>
+    <string name="title_home">Latest</string>
     <string name="title_dashboard">Dashboard</string>
     <string name="title_notifications">Notifications</string>
 </resources>