Skip to content

Instantly share code, notes, and snippets.

View kubode's full-sized avatar
🤔

Masatoshi Kubode kubode

🤔
View GitHub Profile
@kubode
kubode / patterns.md
Last active August 29, 2015 14:03
パターン集
@kubode
kubode / tips.md
Last active August 29, 2015 14:04
@kubode
kubode / KeyEvent.md
Last active August 29, 2015 14:07
キーイベント関連
  • キーイベントは子から親へは伝えられない
  • カスタムViewからActivityのBackを呼びたい場合、View#dispatchKeyEvent(KeyEvent)じゃ無理
  • Activityの参照が取れればいいが、getContext()はActivityである保証はない
  • Instrumentation使う
private void sendBackKey() {
  new AsyncTask<Void, Void, Void>() {
    @Override
 protected Void doInBackground(Void... params) {
@kubode
kubode / EventBus.kt
Last active December 10, 2015 07:02
Rxを使ったEventBusの実装
import rx.Scheduler
import rx.Subscription
import rx.subjects.PublishSubject
import kotlin.reflect.KClass
/**
* [rx]を使ったイベントバス
*/
class EventBus {
private val publishSubject: PublishSubject<Event> = PublishSubject.create()
@kubode
kubode / Injection.kt
Last active December 10, 2015 07:47
Lambda使いまくったDI
import android.app.Activity
import android.app.Application
import android.app.Service
import android.content.Context
import android.support.v4.app.Fragment
import android.view.View
import java.util.*
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KClass
import kotlin.reflect.KProperty
git branch | grep " " | xargs git branch -D

親にTabHostがある場合、注意が必要。

TabHostはdispatchWindowFocusChangedをオーバーライドしており、CurrentViewにのみイベントを伝搬させている。

つまり、Tab自体のViewや、FragmentTabHostを使用している場合、子ViewのonWindowFocusChangeは呼ばれない。

これを防ぐには、TabHostを継承してdispatchWindowFocusChangedをオーバーライドし、ViewGroupと同じ実装にすればよい。

import android.content.SharedPreferences
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty
class SharedPreferencesProperty<T>(val sharedPreferences: SharedPreferences,
val key: String,
val get: SharedPreferences.(String) -> T,
val put: SharedPreferences.Editor.(String, T) -> SharedPreferences.Editor) : ReadWriteProperty<Any, T> {
companion object {
@kubode
kubode / AndroidLogFactory
Created November 18, 2016 15:40
ラムダが使えるLoggerを自作してみた ref: http://qiita.com/kubode/items/56d4638215010d965d7c
/**
* [Log]を使用するログファクトリー
* テストコードでのクラッシュを避けるために実装
*/
class AndroidLogFactory : Logger.LogFactory {
override fun log(priority: Int, tag: String, msg: String, error: Throwable?) {
val errorMessage = error?.let { "\n" + Log.getStackTraceString(it) } ?: ""
Log.println(priority, tag, msg + errorMessage)
}
}