Я новичок в Android Дев. У меня есть одна проблема. В моем приложении у меня есть RecyclerView с 10 элементами, и мне нужно изменить цвет выбранного элемента. Вот мой адаптер:
class TestAdapter(val test : ArrayList<Test>, private val testAdapterCallback: (Test, Int)-> Unit) : RecyclerView.Adapter<TestAdapter.ViewHolder>(){
var index : Int = -1
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.test_view_item, parent, false)
return ViewHolder(v)
}
override fun getItemCount(): Int {
return test.size
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val num : Test = test[position]
holder.textView.text = num.id.toString()
val colorSelected : Int = holder.cardView.getContext().getResources().getColor(R.color.colorSelected)
val colorItem : Int = holder.cardView.getContext().getResources().getColor(R.color.colorItem)
holder.cardView.setOnClickListener(){
testAdapterCallback(num, position)
index=position
notifyDataSetChanged()
}
if (index!=-1){
if(index==position){
holder.cardView.setCardBackgroundColor(colorSelected)
}
else{
holder.cardView.setCardBackgroundColor(colorItem)
}
}
}
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
val cardView = itemView.findViewById<CardView>(R.id.testCardView)
val textView = itemView.findViewById<TextView>(R.id.testTextView)
}
}
И он работает. Но в моей деятельности у меня есть кнопка, которая переключается на следующий элемент в RecyclerView. Также в моем адаптере есть обратный вызов, который возвращает позицию выбранного элемента.
class TestActivity : AppCompatActivity() {
private lateinit var urlToTest: String
private val list = ArrayList<Test>()
private var randomList = ArrayList<Test>()
private var currentItem = 0
private var fragmentsList = ArrayList<Fragment>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test)
val title = getIntent().getStringExtra("TestTitle")
setTitle(title)
urlToTest = "http://sasmobile.ru" + getIntent().getStringExtra("urlToJson") + getIntent().getStringExtra("jsonName")
val recView = findViewById<RecyclerView>(R.id.testRecyclerView)
recView.layoutManager = LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
val connector = Connector().isConnectedToNetwork(this)
val submitButton: Button = findViewById(R.id.submitButton)
if (connector) {
AsyncTaskHandler().execute(urlToTest)
submitButton.setOnClickListener {
if (currentItem != 9) {
currentItem += 1
testAdapterItemClick(randomList[currentItem], currentItem)
if (currentItem == 9) {
submitButton.setOnClickListener() {
val adapter =
TestCheckAdapter(randomList) { item, position ->
testAdapterItemClick(item, position)
}
recView.adapter = adapter
}
}
}
}
}
else{
submitButton.visibility=View.INVISIBLE
openAlertDialog()
}
}
private fun openAlertDialog(){
val dialogBuilder = AlertDialog.Builder(this)
val connector = Connector().isConnectedToNetwork(this)
dialogBuilder.setMessage("Check your Internet connection")
.setCancelable(false)
.setPositiveButton("Try again", DialogInterface.OnClickListener{
dialog, id -> if (connector) {
dialog.cancel()
AsyncTaskHandler().execute(urlToTest)
}
else openAlertDialog()
})
val alertBox = dialogBuilder.create()
alertBox.setTitle("Ooops")
alertBox.show()
}
private fun testAdapterItemClick(item: Test, currI : Int) {
val fT: FragmentTransaction = supportFragmentManager.beginTransaction()
currentItem = currI
val recView : RecyclerView = findViewById(R.id.testRecyclerView)
val layoutManager = LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
layoutManager.scrollToPositionWithOffset(currentItem-5, 0)
recView.layoutManager=layoutManager
val submitButton : Button = findViewById(R.id.submitButton)
if (currentItem<9){
submitButton.text="Next Questions"
}
if (currentItem==9){
submitButton.text="Finish Test"
}
if (item.typeQuestion == "input") {
val bundle = Bundle()
bundle.putParcelable("ITEM", item)
if(!item.questionImageSrc.isNullOrEmpty())
bundle.putString("IMAGE_KEY", item.questionImageSrc)
fragmentsList[currentItem].setArguments(bundle)
if (!fragmentsList[currentItem].isAdded())
fT.add(R.id.frameLayout, fragmentsList[currentItem])
if (fragmentsList[currentItem].isAdded())
fT.replace(R.id.frameLayout, fragmentsList[currentItem])
}
if (item.typeQuestion == "singleChoice") {
val bundle = Bundle()
bundle.putParcelable("ITEM", item)
val count = item.singleChoiceAnswers.count()
bundle.putInt("COUNT_KEY", count)
fragmentsList[currentItem].setArguments(bundle)
if (!fragmentsList[currentItem].isAdded())
fT.add(R.id.frameLayout, fragmentsList[currentItem])
if (fragmentsList[currentItem].isAdded())
fT.replace(R.id.frameLayout, fragmentsList[currentItem])
}
if (item.typeQuestion == "multipleChoice") {
val bundle = Bundle()
bundle.putParcelable("ITEM", item)
val count = item.multipleChoiceAnswers.count()
bundle.putInt("COUNT_KEY", count)
fragmentsList[currentItem].setArguments(bundle)
if (!fragmentsList[currentItem].isAdded())
fT.add(R.id.frameLayout, fragmentsList[currentItem])
if (fragmentsList[currentItem].isAdded())
fT.replace(R.id.frameLayout, fragmentsList[currentItem])
}
fT.addToBackStack(null)
fT.commit()
}
Помогите пожалуйста, как мне изменить цвет, не нажимая на элемент?
Заранее спасибо)