kotlin (anko) анализирует данные в основной операции для другой операции с представлением переработчика [ЗАКРЫТЬ] - PullRequest
0 голосов
/ 01 ноября 2018

Я хочу, чтобы мое представление переработчика анализировало данные моего массива при клике на элементе

strings.xml

<string-array name="club_name">
        <item>Barcelona FC</item>
        <item>Real Madrid FC</item>
        <item>Bayern Munchen FC</item>
        <item>Manchester City FC</item>
        <item>Manchester United FC</item>
        <item>Chelsea FC</item>
        <item>AC Milan FC</item>
        <item>Arsenal FC</item>
    </string-array>

    <array name="club_image">
        <item>@drawable/img_barca</item>
        <item>@drawable/img_madrid</item>
        <item>@drawable/img_bayern</item>
        <item>@drawable/img_city</item>
        <item>@drawable/img_mu</item>
        <item>@drawable/img_chelsea</item>
        <item>@drawable/img_acm</item>
        <item>@drawable/img_arsenal</item>
    </array>
    <array name="desc">
        <item>asdfghjkl</item>
        <item>zxcvbnm</item>
    </array>

MainActivity.kt

    class MainActivity : AppCompatActivity() {


    private var  items : MutableList<Item> = mutableListOf()

    private fun initData(){
        val name = resources.getStringArray(R.array.club_name)
        val image = resources.obtainTypedArray(R.array.club_image)
        items.clear()
        for (i in name.indices){
            items.add(Item(name[i],image.getResourceId(i,0),""))
        }
        image.recycle()
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        initData()
        club_list.layoutManager = LinearLayoutManager(this)
        club_list.adapter = RecyclerViewAdapter(this,items){
            val toast = Toast.makeText(applicationContext,it.name,Toast.LENGTH_SHORT)
            toast.show()
        }
    }
}

RecyclerAdapter.kt

class RecyclerViewAdapter(private val context: Context,private val items: List<Item>,private  val listener:(Item)->Unit)
    : RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>() {

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bindItem(items[position],listener)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder =
        ViewHolder(LayoutInflater.from(context).inflate(R.layout.item_list, parent, false))


    override fun getItemCount(): Int = items.size

    class ViewHolder(override val containerView: View) :RecyclerView.ViewHolder(containerView),LayoutContainer {

        fun bindItem(items:Item,listener: (Item) -> Unit){
            name.text = items.name
            items.image?.let { Picasso.get().load(it).into(image)}
            containerView.setOnClickListener{
                listener(items)
            }
        }

    }
}

Это элемент данных классов Item.kt

data class Item(val name:String?,val image:Int?,val desc: String?)

поэтому я создал массив названий клубов и изображений клубов, показанных в mainacctivity, но я хочу, чтобы эти данные были отправлены в detailacctivity, в котором отображаются имя, изображение и описание

1 Ответ

0 голосов
/ 01 ноября 2018

Вы можете получить массив строк просто context.getStringArrayMethod

если это адаптер, то вам нужен контекст:

var yourVar = context.getStringArray(R.array.your_string_array)

Если это действие, то вы можете напрямую получить доступ к getSTringArray

var yourVar = context.getStringArray(R.array.your_string_array)
...