Skip to content

Commit

Permalink
ユーザータグが表示されない問題を修正
Browse files Browse the repository at this point in the history
fixed #36
BindingAdapterを使ってタグ追加の処理を共通化した
  • Loading branch information
ayatk committed Oct 23, 2017
1 parent 76e77ca commit 68158c1
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.ayatk.biblio.R
import com.ayatk.biblio.databinding.FragmentNovelInfoBinding
import com.ayatk.biblio.model.Novel
import com.ayatk.biblio.repository.library.LibraryRepository
Expand All @@ -33,35 +31,22 @@ class NovelInfoFragment : BaseFragment() {
Parcels.unwrap<Novel>(arguments.getParcelable(BUNDLE_ARGS_NOVEL))
}

private lateinit var viewModel: NovelInfoViewModel

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
binding = FragmentNovelInfoBinding.inflate(inflater, container, false)
binding.viewModel = NovelInfoViewModel(context, navigator, libraryRepository, novel)

novel.novelTags.map {
val tagItem = this.onGetLayoutInflater(savedInstanceState).inflate(R.layout.view_tag, null)
val textView = tagItem.findViewById<TextView>(R.id.tag)
textView.text = it
binding.tagContainer.addView(textView)
}

libraryRepository.find(novel)
.subscribe(
{
it.tag.map {
val tagItem = this.onGetLayoutInflater(savedInstanceState).inflate(
R.layout.view_tag,
null)
val textView = tagItem.findViewById<TextView>(R.id.tag)
textView.text = it
binding.userTagContainer.addView(textView)
}
}
)
viewModel = NovelInfoViewModel(navigator, libraryRepository, novel)
binding.viewModel = viewModel

return binding.root
}

override fun onResume() {
super.onResume()
viewModel.start()
}

override fun onAttach(context: Context?) {
super.onAttach(context)
component().inject(this)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,31 @@

package com.ayatk.biblio.view.helper

import android.content.Context
import android.databinding.BindingAdapter
import android.databinding.BindingConversion
import android.graphics.drawable.ColorDrawable
import android.view.LayoutInflater
import android.widget.TextView
import com.ayatk.biblio.R
import com.google.android.flexbox.FlexboxLayout

object DataBindingHelper {

@JvmStatic
@BindingConversion
fun convertColorToDrawable(color: Int): ColorDrawable = ColorDrawable(color)

@JvmStatic
@BindingAdapter("tags")
fun FlexboxLayout.setTags(tags: List<String>) {
this.removeAllViews()
val inflater = this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
tags.map {
val tagItem = inflater.inflate(R.layout.view_tag, null)
val textView = tagItem.findViewById<TextView>(R.id.tag)
textView.text = it
this.addView(textView)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ package com.ayatk.biblio.viewmodel
import android.app.AlertDialog
import android.content.Context
import android.databinding.BaseObservable
import android.databinding.Bindable
import android.view.View
import android.view.inputmethod.InputMethodManager
import com.ayatk.biblio.BR
import com.ayatk.biblio.model.Library
import com.ayatk.biblio.model.Novel
import com.ayatk.biblio.repository.library.LibraryRepository
Expand All @@ -17,8 +19,7 @@ import com.ayatk.biblio.view.helper.Navigator
import mabbas007.tagsedittext.TagsEditText

class NovelInfoViewModel
constructor(private val context: Context,
private val navigator: Navigator,
constructor(private val navigator: Navigator,
private val libraryRepository: LibraryRepository,
val novel: Novel) : BaseObservable(), ViewModel {

Expand Down Expand Up @@ -48,10 +49,21 @@ constructor(private val context: Context,
// }
// }

@Bindable
var tags = listOf<String>()

fun lastUpdate(): String = FORMAT_yyyyMMdd_kkmm_JP.format(novel.lastUpdateDate)

fun url(): String = novel.publisher.url + novel.code.toLowerCase()

fun start() {
libraryRepository.find(novel)
.subscribe({ library ->
tags = library.tag
notifyPropertyChanged(BR.tags)
})
}

fun onClickWriter(@Suppress("UNUSED_PARAMETER") view: View) {
navigator.navigateToWebPage("http://mypage.syosetu.com/" + novel.writerId)
}
Expand All @@ -60,7 +72,7 @@ constructor(private val context: Context,
navigator.navigateToWebPage("http://ncode.syosetu.com/" + novel.code.toLowerCase())
}

fun onClickUserTag(@Suppress("UNUSED_PARAMETER") view: View) {
fun onClickUserTag(context: Context) {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

val editView = TagsEditText(context)
Expand All @@ -71,8 +83,9 @@ constructor(private val context: Context,
.setTitle("タグの追加")
.setView(editView)
.setPositiveButton("OK") { _, _ ->
libraryRepository.save(Library(novel = novel, tag = editView.tags))
.subscribe()
libraryRepository.save(Library(novel = novel, tag = editView.tags)).subscribe()
tags = editView.tags
notifyPropertyChanged(BR.tags)
imm.hideSoftInputFromWindow(editView.windowToken, 0)
}
.setNegativeButton("キャンセル") { _, _ ->
Expand All @@ -82,11 +95,7 @@ constructor(private val context: Context,


libraryRepository.find(novel)
.subscribe(
{ library ->
editView.setTags(*library.tag.toTypedArray())
}
)
.subscribe({ library -> editView.setTags(*library.tag.toTypedArray()) })

dialog.show()
editView.requestFocus()
Expand Down
8 changes: 5 additions & 3 deletions app/src/main/res/layout/fragment_novel_info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -148,15 +148,16 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@+id/img_tag"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
app:layout_constraintTop_toTopOf="parent"
app:tags="@{viewModel.novel.novelTags}"/>

</android.support.constraint.ConstraintLayout>

<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:onClick="@{viewModel::onClickUserTag}"
android:onClick="@{() -> viewModel.onClickUserTag(context)}"
android:padding="@dimen/space_16dp">

<ImageView
Expand All @@ -181,7 +182,8 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/img_user_tag"
app:layout_constraintTop_toTopOf="parent"/>
app:layout_constraintTop_toTopOf="parent"
app:tags="@{viewModel.tags}"/>

</android.support.constraint.ConstraintLayout>

Expand Down
5 changes: 4 additions & 1 deletion app/src/main/res/layout/view_library_item.xml
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,12 @@
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:visibility="@{viewModel.showTag ? android.view.View.VISIBLE : android.view.View.GONE}"
app:flexDirection="row"
app:flexWrap="wrap"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/publisher">
app:layout_constraintTop_toBottomOf="@+id/publisher"
app:tags="@{viewModel.library.tag}">

<TextView
android:id="@+id/tag_icon"
Expand Down

0 comments on commit 68158c1

Please sign in to comment.