Skip to content

Commit

Permalink
[feat] 검색 결과 탭에 검색 결과 보여주는 기능 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
SangwonYoon committed Jul 25, 2022
1 parent 6e2899c commit 66a441c
Show file tree
Hide file tree
Showing 6 changed files with 196 additions and 7 deletions.
50 changes: 43 additions & 7 deletions app/src/main/java/com/example/publictoilet/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ import java.security.NoSuchAlgorithmException
// 지도상에 검색 범위 표시
// 모드 선택 기능 (자유시점 모드, 트래킹 모드, 나침반 모드)
// TODO BottomSheetFragment 올라오면 지도는 중심 위치 유지하면서 작아지게 구현
// TODO 검색하면 지도에 검색 반경 내 공중 화장실 표시
// TODO 검색 결과 탭을 누르면 RecyclerView에 가까운 거리 순으로 공중화장실 정렬
// 검색하면 지도에 검색 반경 내 공중 화장실 표시
// 검색 결과 탭을 누르면 RecyclerView에 가까운 거리 순으로 공중화장실 정렬
// TODO RecyclerView의 item 클릭 시 지도에서는 화장실 위치 표시, BottomSheetFragment에서는 화장실 정보(별점, 코멘트 등) 표시

class MainActivity : AppCompatActivity(), SearchToiletFragment.OnDataPassListener {
Expand Down Expand Up @@ -162,15 +162,51 @@ class MainActivity : AppCompatActivity(), SearchToiletFragment.OnDataPassListene
mapView.removeAllPOIItems() // 지도 화면에 있는 모든 POI(마커)를 제거한다.

val jsonArray = JSONArray(response.body()!!.string())

val bundle = Bundle()
bundle.putInt("array size", jsonArray.length())

for(idx in 0 until jsonArray.length()){
val tempToilet = jsonArray[idx] as JSONObject
val tempLatitude = tempToilet.getString("latitude") as Double
val tempLongitude = tempToilet.getString("longitude") as Double
val tempToiletName = tempToilet.getString("toiletName")

val tempToiletMarker = makeMarker(tempLatitude, tempLongitude, idx, tempToiletName)
val latitude = tempToilet.getString("latitude") as Double
val longitude = tempToilet.getString("longitude") as Double
val toiletName = tempToilet.getString("toiletName")
val tel = tempToilet.getString("tel")
val openTime = tempToilet.getString("openTime")
val mw = tempToilet.getBoolean("mw")
val m1 = tempToilet.getString("m1")
val m2 = tempToilet.getString("m2")
val m3 = tempToilet.getString("m3")
val m4 = tempToilet.getString("m4")
val m5 = tempToilet.getString("m5")
val m6 = tempToilet.getString("m6")
val w1 = tempToilet.getString("w1")
val w2 = tempToilet.getString("w2")
val w3 = tempToilet.getString("w3")
val score_avg = tempToilet.getString("score_avg")
val distance = tempToilet.getString("distance").toDouble().toInt().toString()

val tempToiletMarker = makeMarker(latitude, longitude, idx, toiletName)
mapView.addPOIItem(tempToiletMarker)

bundle.putString("toiletName_$idx", toiletName)
bundle.putString("tel_$idx", tel)
bundle.putString("openTime_$idx", openTime)
bundle.putBoolean("mw_$idx", mw)
bundle.putString("m1_$idx", m1)
bundle.putString("m2_$idx", m2)
bundle.putString("m3_$idx", m3)
bundle.putString("m4_$idx", m4)
bundle.putString("m5_$idx", m5)
bundle.putString("m6_$idx", m6)
bundle.putString("w1_$idx", w1)
bundle.putString("w2_$idx", w2)
bundle.putString("w3_$idx", w3)
bundle.putString("score_avg_$idx", score_avg)
bundle.putString("distance_$idx", distance)
}

resultFragment.arguments = bundle
}
}
})
Expand Down
38 changes: 38 additions & 0 deletions app/src/main/java/com/example/publictoilet/ResultFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,13 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView

class ResultFragment : Fragment() {

val searchResultList = mutableListOf<Toilet>()

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
Expand All @@ -16,7 +21,40 @@ class ResultFragment : Fragment() {
view.isClickable = true // FrameLayout에서 뒷 화면 터치 방지

//TODO Recycler View adapter
val resultContainer = view.findViewById<RecyclerView>(R.id.result_container)

resultContainer.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
resultContainer.setHasFixedSize(true)

resultContainer.adapter = SearchResultAdapter(requireContext(), searchResultList)

return view
}

override fun onResume() {
super.onResume()
if(arguments != null){
val numOfToilets = requireArguments().getInt("array size")
for(idx in 0 until numOfToilets){
val toiletName = requireArguments().getString("toiletName_$idx")
val tel = requireArguments().getString("tel_$idx")
val openTime = requireArguments().getString("openTime_$idx")
val mw = requireArguments().getBoolean("mw_$idx")
val m1 = requireArguments().getString("m1_$idx")
val m2 = requireArguments().getString("m2_$idx")
val m3 = requireArguments().getString("m3_$idx")
val m4 = requireArguments().getString("m4_$idx")
val m5 = requireArguments().getString("m5_$idx")
val m6 = requireArguments().getString("m6_$idx")
val w1 = requireArguments().getString("w1_$idx")
val w2 = requireArguments().getString("w2_$idx")
val w3 = requireArguments().getString("w3_$idx")
val distance = requireArguments().getString("distance_$idx")
val score_avg = requireArguments().getString("score_avg_$idx")

val toilet = Toilet(toiletName = toiletName!!, tel = tel!!, openTime = openTime!!, mw = mw, m1 = m1!!, m2 = m2!!, m3 = m3!!, m4 = m4!!, m5 = m5!!, m6 = m6!!, w1 = w1!!, w2 = w2!!, w3 = w3!!, distance = distance!!, score_avg = score_avg!!)
searchResultList.add(toilet)
}
}
}
}
62 changes: 62 additions & 0 deletions app/src/main/java/com/example/publictoilet/SearchResultAdapter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.example.publictoilet

import android.content.Context
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import org.w3c.dom.Text

class SearchResultAdapter(val mContext: Context, val searchResultList : MutableList<Toilet>) : RecyclerView.Adapter<SearchResultAdapter.CustomViewHolder>() {

class CustomViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView){
private val toiletName = itemView.findViewById<TextView>(R.id.toilet_name)
private val distance = itemView.findViewById<TextView>(R.id.distance)

fun bind(toilet : Toilet, position: Int){
toiletName.text = toilet.toiletName
distance.text = toilet.distance.toString()
}
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.search_result_item, parent, false)
return CustomViewHolder(view).apply{
itemView.setOnClickListener {
val curPos = adapterPosition
val toilet = searchResultList[curPos]
// 누르면 화면 전환
val intent = Intent(mContext, ToiletInfoActivity::class.java)
intent.putExtra("toiletName", toilet.toiletName)
intent.putExtra("score_avg", toilet.score_avg)
intent.putExtra("tel", toilet.tel)
intent.putExtra("openTime", toilet.openTime)
intent.putExtra("mw", toilet.mw)
intent.putExtra("m1", toilet.m1)
intent.putExtra("m2", toilet.m2)
intent.putExtra("m3", toilet.m3)
intent.putExtra("m4", toilet.m4)
intent.putExtra("m5", toilet.m5)
intent.putExtra("m6", toilet.m6)
intent.putExtra("w1", toilet.w1)
intent.putExtra("w2", toilet.w2)
intent.putExtra("w3", toilet.w3)

mContext.startActivity(intent)
}
}
}

override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
val toilet = searchResultList[position]
holder.apply {
bind(toilet, position)
}
}

override fun getItemCount(): Int {
return searchResultList.size
}
}
19 changes: 19 additions & 0 deletions app/src/main/java/com/example/publictoilet/Toilet.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.example.publictoilet

data class Toilet (
val toiletName : String,
val tel : String,
val openTime : String,
val mw : Boolean,
val m1 : String,
val m2 : String,
val m3 : String,
val m4 : String,
val m5 : String,
val m6 : String,
val w1 : String,
val w2 : String,
val w3 : String,
val distance : String,
val score_avg : String
)
1 change: 1 addition & 0 deletions app/src/main/res/layout/result_tab.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
android:layout_height="match_parent">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/result_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

Expand Down
33 changes: 33 additions & 0 deletions app/src/main/res/layout/search_result_item.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:background="@drawable/review_item_background"
android:layout_width="match_parent"
android:layout_height="60dp">

<TextView
android:id="@+id/toilet_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:textColor="@color/black"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="솔샘 화장실" />

<TextView
android:id="@+id/distance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="18sp"
android:layout_marginEnd="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="300m" />

</androidx.constraintlayout.widget.ConstraintLayout>

0 comments on commit 66a441c

Please sign in to comment.