Как отправить данные из одного элемента RecyclerView для загрузки другого RecyclerView с использованием вложенного JSON с использованием Kotlin

У меня есть два действия, и каждое действие имеет recyclerview, у меня есть вложенный json. Я хочу, чтобы, когда пользователь нажимал первое действие recyclerview, они переходили к следующему действию и отображали recyclerview. Лучшее понимание, пожалуйста, следуйте json-ссылке и коду.

Ссылка Json : https://run.mocky.io/v3/8c3f6be2-a53f-47da-838c-72e603af844d

CropData.kt

data class CropData(
@SerializedName("cropImage")
val cropImage: String,
@SerializedName("cropName")
val cropName: String,
@SerializedName("cropTime")
val cropTime: String,
@SerializedName("cropDetails")
val cropDetails: String,
@SerializedName("cropProcess")
val cropProcess: String,
@SerializedName("cropType")
val cropType: String,
@SerializedName("cropFertilizer")
val cropFertilizer: List<CropFertilizer>
)

CropFertilizer.kt

data class CropFertilizer(
@SerializedName("fertilizerName")
val fertilizerName: String,
@SerializedName("fertilizerFirst")
val fertilizerFirst: String,
@SerializedName("fertilizerSecond")
val fertilizerSecond: String,
@SerializedName("fertilizerThird")
val fertilizerThird: String
)

CropActivity.kt

class CropActivity : AppCompatActivity(), CropOnItemClickListener {

private lateinit var viewModel: CropActivityViewModel
private val cropAdapter by lazy { CropAdapter(this) }

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_crop)

    val repository = Repository()
    val viewModelFactory = CropActivityViewModelFactory(repository)
    viewModel = ViewModelProvider(this, viewModelFactory).get(CropActivityViewModel::class.java)

    viewModel.getCropData()
    viewModel.cropResponse.observe(this, Observer { response ->
        cropAdapter.setData(response)
            Log.d("dCrop", response.toString())
    })
    setUpCrops()
}

private fun setUpCrops() {
    crop_recyclerview.layoutManager = LinearLayoutManager(
        this,
        LinearLayoutManager.VERTICAL, false
    )
    crop_recyclerview.setHasFixedSize(true)
    crop_recyclerview.adapter = cropAdapter
}

override fun onClick(item: CropData, position: Int) {
    val intent = Intent(this, CropDetailsActivity::class.java)
    intent.putExtra("name", item.cropName)
    intent.putExtra("image", item.cropImage)
    intent.putExtra("intro", item.cropDetails)
    intent.putExtra("process", item.cropProcess)
    intent.putExtra("type", item.cropType)
    intent.putExtra("time", item.cropTime)
    startActivity(intent)
}
}

CropAdapter.kt

class CropAdapter(private val cropOnItemClickListener: CropOnItemClickListener) : 
RecyclerView.Adapter<CropAdapter.ViewHolder>() {
private var cropList = emptyList<CropData>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val view = LayoutInflater.from(parent.context).inflate(R.layout.crop_row,parent,false)
    return ViewHolder(view)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.itemView.crop_name.text = cropList[position].cropName
    holder.itemView.crop_details.text = cropList[position].cropDetails
    holder.itemView.crop_time.text = cropList[position].cropTime

    holder.itemView.setOnClickListener{
        cropOnItemClickListener.onClick(cropList[position],position)
    }

}

override fun getItemCount(): Int {
    return cropList.size
}

fun setData(newList: List<CropData>){
    notifyDataSetChanged()
     cropList = newList
    notifyDataSetChanged()
}

class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView)
}

CropDetailsActivity.kt

class CropDetailsActivity : AppCompatActivity() {

private lateinit var viewModel: CropDetailsActivityViewModel
private val fertlizerAdapter by lazy { FertilizerAdapter() }

private val cropFertilizerAdapter by lazy { FertilizerAdapter() }
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_crop_details)

    val bundle:Bundle? = intent.extras
    crop_details_name.text = bundle!!.getString("name")
    val i: String = bundle!!.getString("intro")
    crop_details_intro.text = i
    Glide.with(this).load(bundle.getString("image")).into(crop_details_image);
    val j: String = bundle!!.getString("process") 
    crop_details_process.text = j
    crop_details_time.text = bundle!!.getString("time")
    crop_details_type.text = bundle!!.getString("type")

    val repository = Repository()
    val viewModelFactory = CropDetailsActivityViewModelFactory(repository)
    viewModel = ViewModelProvider(this, viewModelFactory).get(CropDetailsActivityViewModel::class.java)

    viewModel.getFertilizer()
    viewModel.fResponse.observe(this, Observer {
        cropFertilizerAdapter.setData(it)
    })

    crop_details_recyclerview.layoutManager = LinearLayoutManager(
        this,
        LinearLayoutManager.VERTICAL, false
    )
    crop_details_recyclerview.setHasFixedSize(true)
    crop_details_recyclerview.adapter = cropFertilizerAdapter

}
}

Лучшее понимание увидеть изображение [1]: https://i.stack.imgur.com/BtPqe.jpg

Я хочу показать список CropFertilizer в CropDetailsActivity. Как я могу это сделать?

Ваш код в порядке. С какой проблемой вы столкнулись?

Gogul-S 09.04.2021 21:25

На самом деле в первом recylerview мне нужны данные CropData.kt, а затем, когда пользователь щелкает этот элемент recyclerview, они переходят к следующему мероприятию, и у этого действия есть recyclerview, и он показывает данные CropData.kt

Adev 09.04.2021 21:35

Я редактирую свой вопрос и добавляю изображение, теперь вы можете понять вопрос.

Adev 09.04.2021 21:51
0
3
11
0

Другие вопросы по теме