【问题标题】:How to implement the same feature in kotlin?如何在 kotlin 中实现相同的功能?
【发布时间】:2020-03-10 20:25:15
【问题描述】:
@Override
publick boolean onNavigationItemSelected(MenuItem item)
{
int id=item.getItemId();
if(id==R.id.id_List_1)
  {
    array=getResources().getStringArray(R.array.one_array);
    adapted.clear();
    adapted.addAll(array);
    adapter.notifyDataSetChanged();
  }
else if(id==R.id.id_List_2)
  { 
    array=getResources().getStringArray(R.array.two_array);
    adapted.clear();
    adapted.addAll(array);
    adapter.notifyDataSetChanged();
  }
}

//如何在kotlin中实现同样的功能? Android Strudio...我感到很沮丧(((((

【问题讨论】:

  • 欢迎。您可能需要提供更多详细信息,然后才能在这里为您提供帮助。您可以查看this guide,其中包含有关如何最好地向我们提供帮助您所需信息的提示。

标签: java android-studio kotlin


【解决方案1】:

直接的 Kotlin 转换是:

override fun onNavigationItemSelected(item: MenuItem) : Boolean {
    val id = item.getItemId()
    if (id == R.id.id_List_1) {
        array = getResources().getStringArray(R.array.one_array)
        adapted.clear()
        adapted.addAll(array)
        adapter.notifyDataSetChanged()
    } else if (id == R.id.id_List_1) {
        array = getResources().getStringArray(R.array.two_array)
        adapted.clear()
        adapted.addAll(array)
        adapter.notifyDataSetChanged()
    }
    return true
}

您也可以使用类似于 Java 的 switchwhenarray 赋值:

override fun onNavigationItemSelected(item: MenuItem) : Boolean {
    val id = item.getItemId()
    array = when (id) {
        R.id.id_List_1 -> getResources().getStringArray(R.array.one_array)
        R.id.id_List_2 -> getResources().getStringArray(R.array.two_array)
        else -> return true
    }
    adapted.clear()
    adapted.addAll(array)
    adapter.notifyDataSetChanged()
    return true
}

注意:我添加了return true,因为它是一个需要布尔值的函数。

【讨论】:

  • 什么都不覆盖,数组不调用,adapted.clear(),adapted.addAll(array)adapted.notifyDataSetChanged(),不调用,未解析引用适配器
【解决方案2】:

我将分享我是如何做到的,就我而言,我使用的是底部导航,它可能会对您或其他人有所帮助。 首先,我在 onCreate 上设置 OnNavigationItemSelectedListener,然后我定义一个名称来表示我选择的项目“项目”。在我的底部导航中,我有四个图标/项目,所以我创建了 WHEN 方法来检查其中一个被调用。 默认情况下,您需要返回一个布尔值,因此我正在调用一个函数,具体取决于单击的项目,在单击后我将在其中执行所需的操作并返回 false,因为我不希望在单击时突出显示我的图标.

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) bottom_navigation.setOnNavigationItemSelectedListener(BottomNavigationView.OnNavigationItemSelectedListener { item -> when (item.itemId) { R.id.map_mode -> { onMapClicked(item); return@OnNavigationItemSelectedListener false } R.id.tracks_search -> { onTracksClicked(); return@OnNavigationItemSelectedListener false } R.id.exit_search -> { onProfileClicked(); return@OnNavigationItemSelectedListener false } R.id.metric_option -> { onMetricClicked(item); return@OnNavigationItemSelectedListener false } }; return@OnNavigationItemSelectedListener false })}

如果要突出显示,则应返回 true。您还可以创建另一个函数来处理重复行,如 updateAdapter。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2016-03-09
    相关资源
    最近更新 更多