如何从导航视图标题中获取图像 ID? (Kotlin、Android Studio)

问题描述 投票:0回答:1

我才开始学习 Kotlin,也许对于高级开发人员来说这会容易一些。我在导航视图上有标题,这个标题有图像,图像有 id。我想在单击此图像时打开新活动,但为此,我需要获取此图像 ID 并添加 onClickListener。我如何从导航视图标题中获取此图像 ID? 抱歉犯错,英语不是我的母语。 image

class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
    lateinit var binding: ActivityMainBinding
    var adapter: MyAdapter? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.navView.setNavigationItemSelectedListener(this)
        binding.navView.getHeaderView()



        binding.navView.header
        var list = ArrayList<ListItem>()

        list.addAll(fillArrays(getImageId(R.array.imAvatar),
            resources.getStringArray(R.array.tvName),resources.getStringArray(R.array.tvPosition),
            resources.getStringArray(R.array.tvNumber),getImageId(R.array.imFlag),
            resources.getStringArray(R.array.tvInfo),getImageId(R.array.imInfo),
            resources.getStringArray(R.array.tvInfo2),getImageId(R.array.imInfo2),
            resources.getStringArray(R.array.tvInfo3),getImageId(R.array.imInfo3),
            resources.getStringArray(R.array.tvInfo4),getImageId(R.array.imInfo4),
            resources.getStringArray(R.array.tvInfo5),getImageId(R.array.imInfo5)))


        findViewById<RecyclerView>(R.id.rcView).hasFixedSize()
        findViewById<RecyclerView>(R.id.rcView).layoutManager = LinearLayoutManager(this)
        adapter = MyAdapter(list, this)
        findViewById<RecyclerView>(R.id.rcView).adapter = adapter


    }

    override fun onNavigationItemSelected(item: MenuItem): Boolean {
        when(item.itemId){
            R.id.id_result -> {
                Toast.makeText(this, "3-3 (6-5)", Toast.LENGTH_SHORT).show()
                startActivity(Intent(this, ActivityResult::class.java))


            }
            R.id.id_liverpool -> {
                Toast.makeText(this, "Gerrard",Toast.LENGTH_SHORT).show()
                adapter?.updateAdapter(fillArrays(getImageId(R.array.imAvatar),
                    resources.getStringArray(R.array.tvName),resources.getStringArray(R.array.tvPosition),
                    resources.getStringArray(R.array.tvNumber),getImageId(R.array.imFlag),
                    resources.getStringArray(R.array.tvInfo),getImageId(R.array.imInfo),
                    resources.getStringArray(R.array.tvInfo2),getImageId(R.array.imInfo2),
                    resources.getStringArray(R.array.tvInfo3),getImageId(R.array.imInfo3),
                    resources.getStringArray(R.array.tvInfo4),getImageId(R.array.imInfo4),
                    resources.getStringArray(R.array.tvInfo5),getImageId(R.array.imInfo5)))
            }
            R.id.id_milan -> {
                Toast.makeText(this, "Maldini",Toast.LENGTH_SHORT).show()
                adapter?.updateAdapter(fillArrays(getImageId(R.array.imAvatarM),
                    resources.getStringArray(R.array.tvNameM),resources.getStringArray(R.array.tvPositionM),
                    resources.getStringArray(R.array.tvNumberM),getImageId(R.array.imFlagM),
                    resources.getStringArray(R.array.tvInfoM),getImageId(R.array.imInfoM),
                    resources.getStringArray(R.array.tvInfo2M),getImageId(R.array.imInfo2M),
                    resources.getStringArray(R.array.tvInfo3M),getImageId(R.array.imInfo3M),
                    resources.getStringArray(R.array.tvInfo4M),getImageId(R.array.imInfo4M),
                    resources.getStringArray(R.array.tvInfo5M),getImageId(R.array.imInfo5M)))

            }
        }
        binding.drawerLayout.closeDrawer(GravityCompat.START)
        return true
    }

    fun fillArrays(imAvatar:IntArray,tvName:Array<String>,tvPosition:Array<String>,tvNumber:Array<String>,imFlag:IntArray,tvInfo:Array<String>,imInfo:IntArray,tvInfo2:Array<String>,imInfo2:IntArray,tvInfo3:Array<String>,imInfo3:IntArray,tvInfo4:Array<String>,imInfo4:IntArray,tvInfo5:Array<String>,imInfo5:IntArray):List<ListItem>
    {
        var listItemArray = ArrayList<ListItem>()
        for(n in 0..tvName.size -1)
        {
            var listItem = ListItem(imAvatar[n],tvName[n],tvPosition[n],tvNumber[n],imFlag[n],tvInfo[n], imInfo[n],tvInfo2[n], imInfo2[n],tvInfo3[n], imInfo3[n],tvInfo4[n], imInfo4[n],tvInfo5[n], imInfo5[n])
            listItemArray.add(listItem)
        }
        return listItemArray
    }


    fun getImageId(imageArrayId:Int):IntArray
    {
        var tArray:TypedArray = resources.obtainTypedArray(imageArrayId)
        val count = tArray.length()
        val ids = IntArray(count)
        for (i in ids.indices)
        {
            ids[i] = tArray.getResourceId(i, 0)
        }
        tArray.recycle()
        return ids
    }

}

布局:

android:layout_width="match_parent"
android:layout_height="@dimen/header_main_height"
android:background="@color/liverpool_red">

<ImageView
    android:id="@+id/imHeader"
    android:layout_width="90dp"
    android:layout_height="90dp"
    android:layout_marginTop="32dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/champions_league_logo" />

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:text="text"
    android:textColor="@color/white"
    android:textStyle="bold"
    app:layout_constraintEnd_toEndOf="@+id/imHeader"
    app:layout_constraintStart_toStartOf="@+id/imHeader"
    app:layout_constraintTop_toBottomOf="@+id/imHeader" />
android kotlin header android-navigationview
1个回答
0
投票

你必须先获取 headerView,然后找到你的图像 ID 并设置它的点击监听器。

View headerView = navigationview.getheaderview(0);

ImageView imageView = headerView.findViewById(R.id.image_id);

imageView.setOnClickListerner(new OnClickListener(
           public void OnClick(View view){
           //your todo.
         }
        );
© www.soinside.com 2019 - 2024. All rights reserved.