Implicit Intent is not working due to context issue

我只是一个虾纸丫 提交于 2020-07-04 04:26:22

问题


Here is my code :-

Favourite Activity

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat.startActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import java.security.AccessController.getContext


//this is my calling activity
class FavouriteActivity : AppCompatActivity() {
   override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.favourite_activity)
        val mToolbar: Toolbar = findViewById(R.id.toolbar_favourite)
        setSupportActionBar(mToolbar)
        getSupportActionBar()?.setDisplayHomeAsUpEnabled(true);
        getSupportActionBar()?.setDisplayShowHomeEnabled(true);
        setTitle("Favourite Activity");


        //getting recyclerview from xml
        val recyclerView = findViewById(R.id.recyclerView) as RecyclerView
        //adding a layoutmanager
        recyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
        //it can be staggered and grid
        //creating our adapter
        val adapter = CustomAdapter(star)   //here I am calling the adapter activity
        //now adding the adapter to recyclerview
        recyclerView.adapter = adapter

    }
  override fun onSupportNavigateUp(): Boolean {
        onBackPressed()
        return true
    }
}

CustomAdapter class

class CustomAdapter(val userList: ArrayList<User>) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() {

    //this method is returning the view for each item in the list
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomAdapter.ViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.list_layout_favourite, parent, false)
        return ViewHolder(v)
    }


    //this method is binding the data on the list
    override fun onBindViewHolder(holder: CustomAdapter.ViewHolder, position: Int) {
        holder.bindItems(userList[position])

        holder.imgCopy.setOnClickListener(View.OnClickListener {
            holder.shareString(userList[position])
            Toast.makeText(holder.itemView.getContext(),"Copy Button Clicked", Toast.LENGTH_SHORT).show()

        })
    }

    //this method is giving the size of the list
    override fun getItemCount(): Int {
        return userList.size
    }

    //the class is holding the list view
    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        val imgCopy: ImageView = itemView.findViewById(R.id.img_copy) as ImageView

        val textViewName = itemView.findViewById(R.id.tvTitle) as TextView

        fun bindItems(user: User) {

            textViewName.text = user.name

        }

        fun shareString(user: User)
        {
            val message : String = user.name
            val intent = Intent()
            intent.action = Intent.ACTION_SEND
            intent.putExtra(Intent.EXTRA_TEXT,message)
            intent.type = "text/plain"
            startActivity(Intent.createChooser(intent,"Share to :"))    ///Issue occur right here
          }}}

Getting error : Required context , found Intent.

it is working fine in other FragmentActivity. I have tried various methods to called the context. but anything is not working. I have also passed the context from Fragment activity, but that also not worked. Please let me know is there any way to start Intent. As I am always getting error and stuck due to this.


回答1:


The startActivity available in the ViewHolder class is different from the one available in activites. So in this method (available in viewholder), the first parameter should be a context. So pass the context as follows:

startActivity(itemView.context, Intent.createChooser(intent,"Share to :"))


来源:https://stackoverflow.com/questions/62103998/implicit-intent-is-not-working-due-to-context-issue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!