목록Android (136)
Nuke Olaf - Log Store
안드로이드에서 EditText 에 태그 자동완성 기능을 추가하려고 한다. 사용자가 입력하는 단어와 관련있는 태그를 하단에 리스트로 뿌려줄 것이다. 이럴 때 사용하는 View 가 바로 AutoCompleteTextView 이다. 이때, AutoCompleteTextView 를 extend 하는 EditText 를 사용하면, 사용자가 전체 텍스트를 입력하지 않아도 입력하는 텍스트와 연관된 단어들을 제안할 수 있다. AutoCompleteTextView 는 한 개의 단어만을 자동으로 완성시키지만, MultiAutoCompleteTextView 는 콤마로 구분된 여러개의 단어들을 자동으로 완성시켜줄 수 있다. 0. multiAutoCompleteTextView 기본적인 사용 예시 override fun onCr..
https://like-tomato.tistory.com/156 [Notification] 안드로이드 앱 중복 실행 문제 완벽 해결 방법 안드로이드 애플리케이션을 개발하다 보면 대부분의 개발자들이 필수적으로 겪는 문제가 있다. 1. 앱 사용중 알림을 누르면 앱이 중복으로 실행되는 문제. 2. 뷰페이져 갱신 문제. 위 2개의 문제는 아주 흔하게 겪.. like-tomato.tistory.com 마치 프래그먼트 사용하는 것처럼 한 화면에 하나의 액티비티만 사용하는 것 처럼 보여지게 하고 싶었다. Intent(context, ActivityHome::class.java).apply { flags = Intent.FLAG_ACTIVITY_NO_ANIMATION // 액티비티 시작 애니메이션 제거 }.also {..
로그아웃 private fun kakaoLogout() { UserManagement.getInstance().requestLogout(object : LogoutResponseCallback() { override fun onCompleteLogout() { // 로그아웃 완료 후 코드 작성 } }) } 탈퇴 private fun kakaoWithdrawal() { UserManagement.getInstance().requestUnlink(object : UnLinkResponseCallback() { override fun onSuccess(result: Long?) { // 회원탈퇴 성공 후 코드 작성 } override fun onSessionClosed(errorResult: ErrorResu..
AlertDialog Builder 의 setView() 를 사용해서 다이얼로그 안에 웹 뷰를 보여줄 수 있다. private fun showWebViewDialog(url: String) { val webView = WebView(this).apply { loadUrl(url) webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { view!!.loadUrl(url) return true } } } AlertDialog.Builder(this@MainActivity) .setTitle("WebView") .setView(webView) .se..
액티비티 백 스택을 전부 clear 하고, 새로운 액티비티를 시작하고 싶었다. val intent = Intent(this, LoginActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK startActivity(intent) finish() 그러나, 위의 액티비티 플래그가 제대로 먹히지 않아서 finishAffinity() 를 사용했다. affinity 는 액티비티가 속한 task 를 말한다. 기본적으로 한 앱의 모든 액티비티들은 모두 같은 task 에 속해있다. 그러나, 한 액티비티의 기본 affinity 를 다르게 수정할 수 있다. 다른 앱에 정의된 액티비티끼리 affini..
서버에서 데이터를 가져와 리사이클러뷰로 보여줘야 하는 경우, 많은 데이터를 전부다 한번에 가져오는 것은 무리가 있다. 그래서 사용자가 리사이클러뷰 스크롤을 하여 아이템을 보여지게 하는 데 필요한 경우에 무한 스크롤 기능을 구현하여 데이터를 가져올 수 있다. 무한 스크롤링도 어찌 보면 페이징 기능의 한 방식이다. 무한 스크롤 구현방법 0. 레트로핏 인터페이스 작성 레트로핏으로 서버와 통신하여 데이터를 가져올 것이다. 사용할 무한 스크롤 API 는 request 로 페이지와 아이템 개수를 요청하면, response 로 전체 게시글 총 개수, 다음 페이지 유무, 아이템 리스트를 반환한다. @GET("/posts") fun getPosts( @Query("page") page: Int, @Query("limit..
onSaveInstanceState를 사용하여 리사이클러뷰의 스크롤 중인 상태를 저장할 수 있다. 아래의 예시는 ActivityDetail 이 onCreate() 된 후, 다른 액티비티(ActivityAnother)를 호출하여 ActivityDetail 이 잠시 액티비티 스택에 쌓여있다가 다시 ActivityDetail 로 돌아와 onResume() 을 호출할때, 저장되었던 상태를 보여주도록 한다 class ActivityDetail : AppCompatActivity() { private var recyclerViewState: Parcelable? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstan..
HTTP FAILED: java.net.SocketTimeoutException: timeout 요청을 시작한 후 서버와의 연결이 제한시간 내에 이루어지지 않을 경우 위와 같은 에러가 발생한다. 서버와의 연결이 제한시간은 기본값이 10초로 설정되어 있는데, 시간을 이보다 더 늘리고 싶을 경우 okHttpClient 객체에 타임아웃을 설정해 줄 수 있다. connectTimeOut -> 요청을 시작한 후 서버와의 TCP handshake가 완료되기까지 지속되는 시간 ReadTimeOut -> 모든 바이트가 전송되는 속도를 감시 WriteTimeOut -> 읽기 타임 아웃의 반대 방향. 얼마나 빨리 서버에 바이트를 보낼 수 있는지 확인 val okHttpClient = OkHttpClient.Builder(..