如何通过ID打开特定活动



我有一个项目与比赛。在这个项目中,我使用了房间数据库。我的数据库中有三条记录,它们有一个ID,并包含字段imgTeamOne、imgTeamTwo、titleTeamOne、titleTeamTwo、itemDate。我已经为每个匹配准备了一个特定的活动(ActivityDetailOne, ActivityDetailTwo, ActivityDetailThree),我想当我点击第一张卡时- ActivityDetailOne打开,当我点击第二张卡时- ActivityDetailTwo打开,等等。我该怎么做呢?我如何写一个代码,使卡与ID=0打开ActivityDetailOne,请帮助。我是初学者,我不懂

FragmentMatch.kt

class FragmentMatch : Fragment() {
private lateinit var _binding: FragmentMatchBinding
private val binding get() = _binding
private val matchViewModel: ViewModelMatch by activityViewModels()
private lateinit var recyclerView: RecyclerView
private var adapter: RecyclerAdapter? = RecyclerAdapter(emptyList())
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentMatchBinding.inflate(inflater, container, false)
recyclerView = binding.passRecyclerView
recyclerView.layoutManager =
LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
recyclerView.adapter = adapter
requireActivity().title = "Игры"
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
matchViewModel.matchListLiveData.observe(
viewLifecycleOwner,
Observer { receipts -> receipts?.let { updateUI(receipts) } }
)
}
private fun updateUI(matches: List<MatchModel>) {
if (matches.isEmpty()){
initialDb()
}
adapter = RecyclerAdapter(matches)
recyclerView.adapter = adapter
}
private fun initialDb(){
val match = MatchModel(UUID.randomUUID(), "25 сентября 2021", "Chelsea", "Manchester City")
val match2 = MatchModel(UUID.randomUUID(), "25 сентября 2021", "Everton", "Norvich City")
val match3 = MatchModel(UUID.randomUUID(), "25 сентября 2021", "Brentford", "Liverpool")
matchViewModel.addMatch(match)
matchViewModel.addMatch(match2)
matchViewModel.addMatch(match3)
}

private inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
View.OnClickListener {
private lateinit var match: MatchModel
private val titleTeamOne: TextView = itemView.findViewById(R.id.titleTeamOne)
private val imgTeamOne: ImageView = itemView.findViewById(R.id.imgTeamOne)
private val titleTeamTwo: TextView = itemView.findViewById(R.id.titleTeamTwo)
private val imgTeamTwo: ImageView = itemView.findViewById(R.id.imgTeamTwo)
private val dateGame: TextView = itemView.findViewById(R.id.dateGame)
private val favBtn: Button = itemView.findViewById(R.id.favBtn)
private val btnDetail: Button = itemView.findViewById(R.id.btnDetail)

init {
itemView.setOnClickListener(this)
}
fun bind(match: MatchModel) {
this.match = match
titleTeamOne.text = (match.firstCommand)
titleTeamTwo.text = (match.secondCommand)
dateGame.text = (match.date)
when (match.firstCommand) {
"Everton" -> {
imgTeamOne.setImageResource(R.drawable.image_3)
}
"Brentford" -> {
imgTeamOne.setImageResource(R.drawable.image_4)
}
"Norwich" -> {
imgTeamOne.setImageResource(R.drawable.image_5)
}
"Liverpool" -> {
imgTeamOne.setImageResource(R.drawable.image_6)
}
}
when (match.secondCommand) {
"Everton" -> {
imgTeamTwo.setImageResource(R.drawable.image_3)
}
"Brentford" -> {
imgTeamTwo.setImageResource(R.drawable.image_4)
}
"Norwich" -> {
imgTeamTwo.setImageResource(R.drawable.image_5)
}
"Liverpool" -> {
imgTeamTwo.setImageResource(R.drawable.image_6)
}
}
favBtn.setOnClickListener {
val match = MatchModel(match.id, match.date, match.firstCommand, match.secondCommand, true)
matchViewModel.saveMatch(match)
}
btnDetail.setOnClickListener {
val intent = Intent(context, DetailActivity::class.java)
startActivity(intent)
}
}
override fun onClick(v: View) {
}
}
private inner class RecyclerAdapter(private var matches: List<MatchModel>) :
RecyclerView.Adapter<MyViewHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): MyViewHolder {
val itemView =
LayoutInflater.from(parent.context)
.inflate(R.layout.item_match, parent, false)
return MyViewHolder(itemView)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val match = matches[position]
holder.bind(match)
}
override fun getItemCount() = matches.size
}
}

我将在房间db中打开一个新的字段,如"val type: Int"并选中打开新活动的类型。但在我看来,你可以只创建一个活动,并使其通用为每个匹配

由于我最初不想在数据库中创建一个单独的字段,并且我在ID字段中使用了UUID.randomUUID()—这使我的工作变得复杂,因此我编写了检查命令名称并使用该命令打开活动的代码。这并不完全正确,但是如果您在代码中使用没有随机性的ID,则可以按ID进行检查。下面是我的解决方案:

btnDetail.setOnClickListener {
if (match.firstCommand == "Chelsea") {
val intent = Intent(context, DetailActivity::class.java)
startActivity(intent)
}else if (match.firstCommand == "Everton"){
val intent = Intent(context, SecondDetailActivity::class.java)
startActivity(intent)
}else if(match.firstCommand== "Brentford"){
val intent = Intent(context, ThirdDetailActivity::class.java)
startActivity(intent)
}

最新更新