Kotiln: передать данные от адаптера к активности - PullRequest
1 голос
/ 30 июня 2019

Я пытаюсь передать свои данные из adapter в другие activity с помощью putExtra, но когда я нажимаю на элемент в моем списке, чтобы перейти ко второму activity, данные не извлекаются, и введенный по умолчанию текст не отображается. другой способ сделать? или что мне не хватает по этому поводу? Вот мой код:

Мой onBindViewHolder:

override fun onBindViewHolder(holder: AlbumsListViewHolder, position: Int) {
    val AlbumsData = albumsData!![position]
    holder.albumsName.text = AlbumsData.title

    Glide.with(holder.itemView)
        .load(AlbumsData.cover)
        .transition(DrawableTransitionOptions.withCrossFade())
        .into(holder.coverImage)

    holder.itemView.setOnClickListener {
        val intent = Intent(holder.itemView.context, TracksActivity::class.java)
        //listener?.onClick(AlbumsData)
        intent.putExtra("dd", "ff")
        holder.itemView.context.startActivity(intent)
    }
}

Мой второй Activity:

class TracksActivity: AppCompatActivity(), TracksView {

    private var albumsAdapter: AlbumsAdapter? = null

    override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onCreate(savedInstanceState, persistentState)
        setContentView(R.layout.activity_tracks)

        //albumsAdapter = findViewById(R.id.trackslist_recycleview)
        val msg = intent.getStringExtra("dd")
        Log.d("dd", "${msg}")
    }
}

1 Ответ

1 голос
/ 30 июня 2019

Вы можете использовать callback Прежде всего, определите обратный вызов в вашем адаптере следующим образом:

    interface CallbackInterface {   
        fun passDataCallback(message: String)
    }

Затем инициализируйте обратный вызов interface в вашем adapter:

class YourAdapter(private val callbackInterface:CallbackInterface) :
    RecyclerView.Adapter<CurrencyListAdapter.ViewHolder>() {
.
.
.
}

Затем используйте метод обратного вызова из интерфейса внутри вашего onBindViewHolder() следующим образом:

holder.itemView.setOnClickListener {
        //Set your codes about intent here
        callbackInterface.passResultCallback("Your message")
}

И, наконец, реализуйте ваш метод callback в вашем activity следующим образом:

class TracksActivity: AppCompatActivity(), TracksView , YourAdapterName.CallbackInterface {

    private var albumsAdapter: AlbumsAdapter? = null

    override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onCreate(savedInstanceState, persistentState)
        setContentView(R.layout.activity_tracks)
    }

  override fun passResultCallback(message: String) {
         //message is "ff"
    }
}

UPDATE:

Если вы не используете callback, как вы написали, просто замените activity на следующее:

class TracksActivity: AppCompatActivity(), TracksView {

    private var albumsAdapter: AlbumsAdapter? = null

    override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onCreate(savedInstanceState, persistentState)
        setContentView(R.layout.activity_tracks)

        var bundle : Bundle? = intent.extras
        var message = bundle!!.getString("dd") 
        Log.d("dd", "${message}")
    }
}
...