LocalSoftwareKeyboardController, FocusRequester の2クラスを使う
LocalSoftwareKeyboardControllerを取得して、show/hideメソッドをコールする
@Composable
fun sample() {
val keyboardController = LocalSoftwareKeyboardController.currentUIレイヤー(Activity, Fragment等)からの、Flowのcollect方法は、大きく次の3つがあります。
| import androidx.recyclerview.widget.DiffUtil | |
| import com.xwray.groupie.GroupieViewHolder | |
| import com.xwray.groupie.Item | |
| abstract class DiffCallbackItem<T, VH : GroupieViewHolder>( | |
| private val data: T, | |
| private val callback: DiffUtil.ItemCallback<T> | |
| ) : Item<VH>() { | |
| override fun isSameAs(other: Item<*>): Boolean { | |
| if (viewType != other.viewType) { |
| @Composable | |
| fun <T> observe( | |
| data: Flow<T>, | |
| transform: (T) -> T = { it } | |
| ): T? { | |
| var result: T? by state { null } | |
| val action: suspend (T) -> Unit = remember { { result = transform(it) } } | |
| onCommit(data) { | |
| val job = GlobalScope.launch(Dispatchers.Main) { |
| import android.content.Context | |
| import android.util.AttributeSet | |
| import androidx.constraintlayout.widget.ConstraintHelper | |
| import androidx.constraintlayout.widget.ConstraintLayout | |
| import androidx.core.view.isGone | |
| import androidx.core.view.marginLeft | |
| import androidx.core.view.marginRight | |
| import androidx.core.view.updateLayoutParams | |
| class GoneOverflow @JvmOverloads constructor( |
| class MainFragment : Fragment(R.layout.main_frag2) { | |
| private val binding: MainFrag2Binding by viewBinding() | |
| override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | |
| super.onViewCreated(view, savedInstanceState) | |
| // ... | |
| } | |
| } |
| class MainFragment : Fragment(R.layout.main_frag) { | |
| // private lateinit var binding: MainFragBinding <-- memory leak? | |
| private val binding: MainFragBinding get() = MainFragBinding.bind(view!!) | |
| override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | |
| super.onViewCreated(view, savedInstanceState) | |
| // ... | |
| } | |
| } |
| class ChildFragment : Fragment() { | |
| private lateinit var binding: ChildFragBinding | |
| override fun onCreateView( | |
| inflater: LayoutInflater, | |
| container: ViewGroup?, | |
| savedInstanceState: Bundle? | |
| ): View? { | |
| binding = ChildFragBinding.inflate(inflater, container, false) | |
| return binding.root |
| public final class AppModule_ProvideFugaFactory implements Factory<Fuga> { | |
| @Override | |
| public Fuga get() { | |
| return provideFuga(); | |
| } | |
| public static AppModule_ProvideFugaFactory create() { | |
| return InstanceHolder.INSTANCE; | |
| } |