コンテンツの切り替え

今回はJetpack composeでボタンを押すごとにコンテンツを切り替えるプログラムに挑戦してみました。 と言ってもif文で表示する部品を切り替えているだけなのでシンプルなプログラムになっています。 環境はAndroid Studio Giraffe(2022.3.1)で作成しました。 初心者が書いたコードなので、ご利用の際は適宜修正してください。

※この記事は2024/05/08時点の情報です。

MainActivity.kt
今回のメインとなるプログラムです。
ボタンを押すごとにフラグをON/OFFし、if文でフラグを判定して表示するコンテンツを切り替えています。

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import com.example.switch.ui.theme.SwipeableTheme
import androidx.compose.foundation.layout.*
import androidx.compose.material3.Button
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            SwipeableTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    ContentSwitchingExample()
                }
            }
        }
    }
}

@Composable
fun ContentSwitchingExample() {
    // Stateを使ってボタンが押されたかどうかを追跡します
    var isContentChange by remember { mutableStateOf(false) }

    // コンテンツを切り替える関数
    fun toggleContent() {
        isContentChange = !isContentChange
    }

    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(16.dp),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        // ボタンを配置します
        Button(onClick = { toggleContent() }) {
            Text(text = if (isContentChange) "Content A" else "Content B")
        }

        // コンテンツを切り替えます
        if (isContentChange) {
            Text(
                text = "Content A",
                modifier = Modifier.padding(top = 16.dp)
            )
        } else {
            Text(
                text = "Content B",
                modifier = Modifier.padding(top = 16.dp)
            )
        }
    }
}

今回のプログラムを実行した結果です。ボタンを押すごとにコンテンツAとコンテンツBが切り替わります。

KotlinでWebView

シンプルに実装できるのは好印象ですね。 動的にコンテンツを切り替える機会は結構あるかも知れませんので覚えておきましょう!

今回のプログラムは理解できましたか?

Jetpack composeで動的にコンテンツを切り替えた画像

よく分からないという人は実際に自分で実装して少しずつ理解していきましょう!

管理人情報