floating button, kakao 책검색

김가영·2020년 10월 14일
0

Android

목록 보기
2/6
post-thumbnail

floating button 추가하기

  • main_activity.xml
<com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/btn_makePost_main"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="@color/colorPrimaryDark"
        android:src="@drawable/ic_add_plus_button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />
  • MainActivity.kt
btn_makePost_main.setOnClickListener {
	val intent = Intent(this, MakePostActivity::class.java)
	startActivity(intent)
}

Kakao Api 이용하기

시작하기

https://developers.kakao.com/docs/latest/ko/getting-started/sdk-android 참고

App.kt

class App :Application(){
    override fun onCreate() {
        super.onCreate()

        KakaoSdk.init(this, getString(R.string.kakao_key_restApi))
    }
}

RequestToServer.kt

object RequestToServer {
    var kakaoRetrofit = Retrofit.Builder()
        .baseUrl("https://dapi.kakao.com")
        .addConverterFactory(GsonConverterFactory.create())
        .build()


    var kakaoService: RequestInterface = kakaoRetrofit.create(RequestInterface::class.java)
    
}

RequestInterface.kt

interface RequestInterface {
    @GET("/v3/search/book")
    fun searchBook(
        @Header("Authorization") token : String,
        @Query("query") query: String,
        @Query("target") target : String = "title"
    ) : Call<ResponseSearchBook>
}

customEnqueue.kt

package com.gyoung.movierecord.function

import android.util.Log
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response

fun<ResponseType> Call<ResponseType>.customEnqueue(
    onFail:()-> Unit,
    onSuccess:(ResponseType)->Unit,
    onError:(Response<ResponseType>)->Unit={}
){
    this.enqueue(object: Callback<ResponseType> {
        override fun onFailure(call: Call<ResponseType>, t: Throwable) {
            onFail()
            Log.d("network", t.message.toString())
        }

        override fun onResponse(call: Call<ResponseType>, response: Response<ResponseType>) {
            response.body()?.let{
                onSuccess(it)

            }?:onError(response)
        }
    })

}

MakePostActivity.kt

datas = mutableListOf()
val query = et_query_searchItem.text.toString()
try{
    val requestToServer = RequestToServer
    requestToServer.kakaoService.searchBook(
        "KakaoAK " + getString(R.string.kakao_key_restApi),
        query
    ).customEnqueue(
        onSuccess = {
            if(it.documents!=null){
                for(document in it.documents){
                    datas.add(Documents(
                        document.title,
                        document.authors,
                        document.thumbnail
                    ))
                }

                rv_adapter.datas = datas
                rv_main_searchItem.adapter = rv_adapter
                rv_adapter.notifyDataSetChanged()
            }else{
                this.showCustomToast("검색 결과가 없습니다")
            }
        },
        onFail = {},
        onError = { Log.d("MakePost", it.message())}
    )
}catch (e : Exception){

}

EditText 키보드 이벤트 받기

  • 키보드 우측하단 버튼 모양을 바꾸고, 버튼을 누르면 검색이 되도록 했다.

<EditText
    android:imeOptions="actionSearch" 
    android:inputType="text" />
et_query_searchItem.setOnEditorActionListener { textView, actionId, keyEvent ->
    if(actionId == EditorInfo.IME_ACTION_DONE){
        searchItem()
        true
    }else{
        false
    }
}
profile
개발블로그

0개의 댓글