【问题标题】:Android Kotlin: Creating RecyclerView in FragmentAndroid Kotlin:在 Fragment 中创建 RecyclerView
【发布时间】:2020-05-17 04:23:20
【问题描述】:

我是 Android 开发的新手,我一直坚持在片段中创建 RecyclerView。

我创建了 2 个适配器(AdapterAll.kt 用于 Tablayout 下的多个片段,MainAdapter.kt 用于我想在其上创建 recyclerview 的片段)但无法调用 MainAdapter.kt。 MainActivity.kt 调用 AdapterAll.kt 但不调用 MainAdapter.kt。 我相信这就是为什么我可以使用片段创建 Tablayout 但不能在片段上创建 Recyclerview。

非常感谢!

代码如下:

MainActivity.kt

import controller.AdapterAll
import controller.MainAdapter
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        viewPager.adapter = AdapterAll(supportFragmentManager)
        tabLayoutId.setupWithViewPager(viewPager)

        tabLayoutId.setTabTextColors(Color.GRAY, Color.parseColor("white"))

        recyclerView_main.layoutManager = LinearLayoutManager(this)
        recyclerView_main.adapter = MainAdapter()
    }
}

AdapterAll.kt

class AdapterAll(fragmentManager: FragmentManager): 
    FragmentPagerAdapter(fragmentManager) {
    override fun getItem(position: Int): Fragment {
        when (position) {
            0 -> return Function1()
            1 -> return Function2()
            2 -> return Function3()
            3 -> return Function4()
            4 -> return Function5()
            5 -> return Function6()
            6 -> return Function7()
        }
        return Function1()
    }

    override fun getCount(): Int {
        return 7
    }

    override fun getPageTitle(position: Int): CharSequence? {
        when (position) {
            0 -> return "Function 1"
            1 -> return "Function 2"
            2 -> return "Function 3"
            3 -> return "Function 4"
            4 -> return "Function 5"
            5 -> return "Function 6"
            6 -> return "Function 7"
        }
        return null
    }
}

MainAdapter.kt

class MainAdapter: RecyclerView.Adapter<CustomViewHolder>() {


    override fun getItemCount(): Int {
        return 10
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomViewHolder {
        val layoutInflater = LayoutInflater.from(parent.context)
        val cellForRow = layoutInflater.inflate(R.layout.fragment_function1, parent, false)
        return CustomViewHolder(cellForRow)
    }

    override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
        holder.view.textView_video_title.text = "123"
    }

}

class CustomViewHolder(val view: View): RecyclerView.ViewHolder(view) {

}

【问题讨论】:

  • 所以一切正常,但您看不到您的RecyclerView
  • 我相信一切都很好。没错,我看不到 RecyclerView。此外,我没有收到任何错误消息,所以我认为这与不调用 MainAdapter.kt 有关。
  • 添加此布局R.layout.fragment_function1
  • 所以你的建议是在layout下创建一个xml文件?我已经有了 fragment_function1 但仍然无法调用 MainAdapter.kt。

标签: android android-fragments kotlin android-recyclerview android-tablayout


【解决方案1】:

您的适配器没问题。如果我没记错的话,您希望在 Fragments 中有一个 recyclerView,但为什么要在 Activity 中创建一个 recyclerView。在您的 Fragments 中创建一个 recyclerView 并在 recyclerView 中设置 MainAdapter.kt。

class FragmentOne : Fragment() {

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val view = inflater.inflate(R.layout.fragment_blank, container, false)

    view.recyclerView.layoutManager = LinearLayoutManager(activity)
    view.recyclerView.adapter = MainAdapter()


    return view
}}

【讨论】:

  • 啊哈做了一些调整,问题现在解决了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
相关资源
最近更新 更多