お世話になります。KOTLINのwebviewについて質問させて頂きます。まず以下図の1と2をご覧ください。
1と2で表示するURLを変更したいと考えております。
#1がおされたときにgoogle.com を表示
#2がおされたときにyahoo.com を表示
#ためしたこと
ためしたことを記載させて頂きます。
val myWebView: WebView = findViewById(R.id.webview) myWebView.loadUrl("https://www.google.com")
色々試した結果なんとか自分なりにコードを作成し、上記に表示したMainActivity.ktの一番下の2行を加えて
無事webviewで表示させる事に成功しました。※他は割愛します。
#MainActivity.kt
package com.myapplication import android.os.Bundle import android.webkit.WebView import android.webkit.WebViewClient import com.google.android.material.bottomnavigation.BottomNavigationView import androidx.appcompat.app.AppCompatActivity import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.setupActionBarWithNavController import androidx.navigation.ui.setupWithNavController import androidx.core.app.ComponentActivity.ExtraData import androidx.core.content.ContextCompat.getSystemService import android.icu.lang.UCharacter.GraphemeClusterBreak.T class MainActivity : AppCompatActivity() { var mWebView: WebView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val navView: BottomNavigationView = findViewById(R.id.nav_view) val navController = findNavController(R.id.nav_host_fragment) // Passing each menu ID as a set of Ids because each // menu should be considered as top level destinations. val appBarConfiguration = AppBarConfiguration( setOf( R.id.navigation_home, R.id.navigation_reaction, R.id.navigation_dashboard, R.id.navigation_notifications /* メニュー追加する */ ) ) setupActionBarWithNavController(navController, appBarConfiguration) navView.setupWithNavController(navController) val myWebView: WebView = findViewById(R.id.webview) myWebView.loadUrl("https://www.google.com") } }
しかしMainactiviyに記載している為、Homeやダッシュボードボタンを切り替えてもすべてGoogleが表示されてしまいます。
これを解決する実装方法として
A案 Mainactiviyの中にもしもダッシュボードが押されていたら という判定を書く方法と
B案 Dashboardfragment.ktの中に以下を組み込む方法があります。
val myWebView: WebView = findViewById(R.id.webview)
myWebView.loadUrl("https://www.yahoo.com")
A案は「Homeかダッシュボードかいずれのボタンが押されているかIF文判定コードの記載方法」がわかりませんでした。
B案ですが、以下のように試して組み込んだ結果エラーが出てうまくいかず非常に困っています。
# Dashboardfragment.kt
package com.myapplication.ui.dashboard import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders class DashboardFragment : Fragment() { private lateinit var dashboardViewModel: DashboardViewModel override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { dashboardViewModel = ViewModelProviders.of(this).get(DashboardViewModel::class.java) val root = inflater.inflate(R.layout.fragment_dashboard, container, false) val textView: TextView = root.findViewById(R.id.text_dashboard) dashboardViewModel.text.observe(this, Observer { textView.text = it }) val myWebView: WebView = findViewById(R.id.webview) myWebView.loadUrl("https://www.yahoo.com") return root } }
val myWebView: WebView = root.findViewById(R.id.webview) このコードに対して、ボタンを実際押すと強制終了します。
「 D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: com.myapplication, PID: 17844 java.lang.IllegalStateException: root.findViewById(R.id.webview) must not be null at com.myapplication.ui.dashboard.DashboardFragment.onCreateView(DashboardFragment.kt:31)」というエラー
A案かB案いずれでも構いませんのでコードを添えて頂けると助かります。
宜しくお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。