63510


## 実行したいこと

Fragment から別の Fragment に画面遷移をしようとしています。

[[Android] Fragment から別の Fragment に画面遷移させてみる](https://akira-
watson.com/android/fragment-
fragment.html)という記事を参考にしていますが、Javaで書かれているので自動翻訳でKotlinにするとエラーが起きて解決方法がわかりません。

## エラーメッセージ

これらのエラーをどうしたら解決できるのかわからず、困っています。

MainActivity.kt

[code]

    Unresolved reference:activity_main
    Unresolved reference:container
    
[/code]

Fragment01.kt

[code]

    Unresolved reference:fragment01
    Unresolved reference:textview_01
    Unresolved reference:button_01
    Unresolved reference:container
    Unresolved reference:pop_01
    
[/code]

Fragment02.kt

[code]

    Unresolved reference:fragment02
    Unresolved reference:textview_02
    Unresolved reference:button_02
    Unresolved reference:container
    Unresolved reference:pop_02
    
[/code]

## コード

layoutとvaluesはそのまま[[Android] Fragment から別の Fragment に画面遷移させてみる](https://akira-
watson.com/android/fragment-fragment.html)のコードを実行しています。

MainActivity.kt

[code]

    package com.example.fragfrag
    
    import android.R
    import android.os.Bundle
    import androidx.appcompat.app.AppCompatActivity
    import androidx.fragment.app.FragmentManager
    import androidx.fragment.app.FragmentTransaction
    import kotlinx.android.synthetic.main.activity_main.*
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            if (savedInstanceState == null) {
                val fragmentManager = supportFragmentManager
                val fragmentTransaction = fragmentManager.beginTransaction()
    
                // BackStackを設定
                fragmentTransaction.addToBackStack(null)
    
                // counterをパラメータとして設定
                val count = 0
                fragmentTransaction.replace(R.id.container, Fragment01.newInstance(count))
    
                fragmentTransaction.commit()
            }
        }
    }
    
[/code]

Fragment01.kt

[code]

    package com.example.fragfrag
    
    import androidx.fragment.app.Fragment
    import androidx.fragment.app.FragmentManager
    import androidx.fragment.app.FragmentTransaction
    
    import android.R
    import android.os.Bundle
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    import android.widget.Button
    import android.widget.TextView
    
    class Fragment01 : Fragment() {
    
        private var cnt = 0
    
        // FragmentのViewを生成して返す
        override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
    
            return inflater.inflate(
                R.layout.fragment01,
                container, false
            )
        }
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
    
            val args = arguments
    
            if (args != null) {
                val count = args.getInt("Counter")
                val str = "Fragment01: $count"
                cnt = count + 1
    
                val textView = view.findViewById(R.id.textview_01)
                textView.setText(str)
            }
    
            val button01 = view.findViewById(R.id.button_01)
            button01.setOnClickListener(View.OnClickListener {
                val fragmentManager = fragmentManager
    
                if (fragmentManager != null) {
                    val fragmentTransaction = fragmentManager.beginTransaction()
                    // BackStackを設定
                    fragmentTransaction.addToBackStack(null)
    
                    fragmentTransaction.replace(R.id.container, Fragment02.newInstance(cnt))
                    fragmentTransaction.commit()
                }
            })
    
            // BackStackで１つ戻す
            val pop01 = view.findViewById(R.id.pop_01)
            pop01.setOnClickListener(View.OnClickListener {
                val fragmentManager = fragmentManager
                fragmentManager?.popBackStack()
            })
        }
    
        companion object {
    
            internal fun newInstance(count: Int): Fragment01 {
                // Fragemnt01 インスタンス生成
                val fragment01 = Fragment01()
    
                // Bundle にパラメータを設定
                val args = Bundle()
                args.putInt("Counter", count)
                fragment01.arguments = args
    
                return fragment01
            }
        }
    }
    
[/code]

Fragment02.kt

[code]

    package com.example.fragfrag
    
    import androidx.fragment.app.Fragment
    import androidx.fragment.app.FragmentManager
    import androidx.fragment.app.FragmentTransaction
    
    import android.R
    import android.os.Bundle
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    import android.widget.Button
    import android.widget.TextView
    
    class Fragment02 : Fragment() {
    
        private var cnt = 0
    
        // FragmentのViewを生成して返す
        override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
    
            return inflater.inflate(
                R.layout.fragment02,
                container, false
            )
        }
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
    
            val args = arguments
    
            if (args != null) {
                val count = args.getInt("Counter")
                val str = "Fragment02: $count"
                cnt = count + 1
    
                val textView = view.findViewById(R.id.textview_02)
                textView.setText(str)
            }
    
            val button02 = view.findViewById(R.id.button_02)
            button02.setOnClickListener(View.OnClickListener {
                val fragmentManager = fragmentManager
                if (fragmentManager != null) {
                    val fragmentTransaction = fragmentManager.beginTransaction()
    
                    // BackStackを設定
                    fragmentTransaction.addToBackStack(null)
    
                    fragmentTransaction.replace(R.id.container, Fragment01.newInstance(cnt))
                    fragmentTransaction.commit()
                }
            })
    
            // BackStackで１つ戻す
            val pop02 = view.findViewById(R.id.pop_02)
            pop02.setOnClickListener(View.OnClickListener {
                val fragmentManager = fragmentManager
                fragmentManager?.popBackStack()
            })
        }
    
        companion object {
    
            internal fun newInstance(count: Int): Fragment02 {
                // Fragemnt02 インスタンス生成
                val fragment02 = Fragment02()
    
                // Bundleにパラメータを設定
                val barg = Bundle()
                barg.putInt("Counter", count)
                fragment02.arguments = barg
    
                return fragment02
            }
        }
    }
    
[/code]

## ご回答を受けて試したこと

各ktファイルの `import android.R`を削除しました。

  * 記事では後段にリソースファイルがありますが、これらはプロジェクトに読み込まれていますか?
  * その場合、最後のファイルは記事内ではstrngs.xmlとなっていますが正しくはstrings.xmlとなります。正しく配備されていますか?

これらの２点も確認しました。

エラーが以下のように変わりました。

Fragment01.ktとFragment02.ktで`findViewById`がエラーになります。  
[![画像の説明をここに入力](https://i.stack.imgur.com/1rTSg.png)](https://i.stack.imgur.com/1rTSg.png)


CC BY-SA 4.0
2020-03-02T15:33:05.590
63506
2020-03-03T09:34:18.160
2020-03-03T08:04:42.787
question
java android kotlin
Fragment から別の Fragment に画面遷移をKotlinで実行するときのエラー


こんにちは。はじめまして。

エラーの内容はリソースファイルの読み込みエラーです。

Unresolved Reference = 未解決の参照

ですので、各ktファイルの`import android.R`を削除して、  
プロジェクトで動的生成されるパッケージのRファイルをimportするようにしてください。

また以下の点も確認してください

  * 記事では後段にリソースファイルがありますが、これらはプロジェクトに読み込まれていますか?
  * その場合、最後のファイルは記事内では`strngs.xml`となっていますが正しくは`strings.xml`となります。正しく配備されていますか?

**[追記に対する回答]**  
Javaのように変数に型を示していないため、型推論に失敗しているので元コードを見ながら下記のように`<>`で型を指定してあげてください。

[code]

    val textView = view.findViewById<TextView>(R.id.textview_02)
    
[/code]


CC BY-SA 4.0
2020-03-02T23:29:55.760
63510
2020-03-03T09:34:18.160
2020-03-03T09:34:18.160
37777
37777
63506
answer