何となく脳内変換と検索で行ける。
TextViewをボタンの代わりにしてタッチイベント処理。
XMLは省略。テストだから。
【MainActivity.kt】
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val mTipsLayout = findViewById(R.id.tips_button)
mTipsLayout.setOnTouchListener { v: View?, event: MotionEvent ->
val action = event.actionMasked
when (action) {
MotionEvent.ACTION_DOWN -> {
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_layout, TipsFragment.newInstance(" tips ",""))
.commitNow()
}
return@setOnTouchListener true
}
else -> return@setOnTouchListener true
}
}
val mMainLayout = findViewById(R.id.start_button)
mMainLayout.setOnTouchListener { v: View?, event: MotionEvent ->
val action = event.actionMasked
when (action) {
MotionEvent.ACTION_DOWN -> {
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_layout, MainFragment.newInstance(" Main "))
.commitNow()
}
return@setOnTouchListener true
}
else -> return@setOnTouchListener true
}
}
}
}
MainFragmentとTipsFragmentは戻るとMainActivityに。
Fragmentを削除しているのに画面に文字が残る。
意味分からないのとMainFragment始動なので強制的にMainFragmentへ。
viewModelは別クラスのUIを参照させるとメモリリークするので工夫が必要。
色々機能を一つのクラスにまとめたり削除したり、拡張も考えつつ構造構築かな。
【TipsFragment.kt】
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"
class TipsFragment : Fragment() {
private var param1: String? = null
private var param2: String? = null
companion object {
@JvmStatic
fun newInstance(param1: String, param2: String) =
TipsFragment().apply {
arguments = Bundle().apply {
putString(ARG_PARAM1, param1)
putString(ARG_PARAM2, param2)
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
param1 = it.getString(ARG_PARAM1)
param2 = it.getString(ARG_PARAM2)
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_tips, container, false)
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?
) {
super.onViewCreated(view, savedInstanceState);
val textView = view.findViewById(R.id.message_tips_fragment)
textView.setText(param1)
textView.setOnTouchListener { v: View?, event: MotionEvent ->
val action = event.actionMasked
when (action) {
MotionEvent.ACTION_DOWN -> {
parentFragmentManager.beginTransaction()
.replace(R.id.fragment_layout, MainFragment.newInstance(" main "))
.commitNow()
return@setOnTouchListener true
}
else -> return@setOnTouchListener true
}
}
}
}
【MainFragment.kt】
private const val ARG_KEY = "PATH"
class MainFragment : Fragment() {
private var full_path:String = ""
companion object {
fun newInstance(path:String) =
MainFragment().apply {
arguments = Bundle().apply {
putString(ARG_KEY,path)
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
full_path = it.getString(ARG_KEY,"MainFragment")
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return inflater.inflate(R.layout.fragment_main, container, false)
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?
) {
super.onViewCreated(view, savedInstanceState);
// 省略。tipsとほぼ同じ。
}
}
前日は問題なくビルドできてたのに
起動してビルドしたら警告...、バージョンがなんたら。
決めたAndroidOSでアプリ作成をしたいのに次の日にそのAPIじゃ無理。対象を上げろみたいな...。
昨日はビルドしてエミュ動いてたじゃん。
気まぐれキャラか!