首页 > 解决方案 > 我在哪里将逻辑放在片段中以与 UI 交互?安卓科特林

问题描述

所以我正在尝试构建一个 github 移动应用程序。我有一个底部导航,它连接到三个片段,分别是主页、个人资料和设置。所以在这个家庭片段中。我有一个按钮,我想导航到一个新的活动,还有一个来自图像的按钮,它对 github 网站有一个意图。我也有一个recyclerview,但它不起作用。我对如何让它在片段上工作感到困惑,因为在我有底部导航之前,我只有一个活动并且它工作得很好。这是家庭片段的代码。这是我的片段的代码:

class HomeFragment : Fragment() {

private lateinit var binding: FragmentHomeBinding
private lateinit var rvProfiles: RecyclerView
private var list: ArrayList<Profiles> = arrayListOf()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

}

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_home, container, false)

}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    binding = FragmentHomeBinding.inflate(layoutInflater)

    rvProfiles = binding.rvGithubProfiles
    rvProfiles.setHasFixedSize(true)

    val githubToolbarButton = binding.toolbar.gitHubLogo
    githubToolbarButton.setOnClickListener{
        val intent = Intent(Intent.ACTION_VIEW, Uri.parse("http://www.github.com"))
        startActivity(intent)
    }

    val searchDeveloperButton = binding.searchDev
    searchDeveloperButton.setOnClickListener{
        val searchIntent = Intent(context, SearchUsersActivity::class.java)
        startActivity(searchIntent)
    }

    list.addAll(ProfilesData.listData)
    showRecyclerList()
}

private fun showRecyclerList(){
    rvProfiles.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL,false)
    val listProfileAdapter = ListProfileAdapter(list)
    rvProfiles.adapter = listProfileAdapter
}

}

完整代码在我的 github 存储库中:https ://github.com/briancatraguna/GitHubClone

标签: androidandroid-studiokotlinandroid-fragments

解决方案


从 onviewcreated 中删除绑定的初始化。如下做

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    binding = FragmentHomeBinding.inflate(layoutInflater)
    return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    rvProfiles = binding.rvGithubProfiles
    rvProfiles.setHasFixedSize(true)

    val githubToolbarButton = binding.toolbar.gitHubLogo
    githubToolbarButton.setOnClickListener{
        val intent = Intent(Intent.ACTION_VIEW, Uri.parse("http://www.github.com"))
        startActivity(intent)
    }

    val searchDeveloperButton = binding.searchDev
    searchDeveloperButton.setOnClickListener{
        val searchIntent = Intent(context, SearchUsersActivity::class.java)
        startActivity(searchIntent)
    }

    list.addAll(ProfilesData.listData)
    showRecyclerList()
}

推荐阅读