我想根据“ currentPage”的值来更改菜单项-“ previous_page button”的可见性:
我收到此错误:
findViewById<View>(R.id.previous_page_button) must not be null
这是我的菜单:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/previous_page_button"
android:icon="@drawable/ic_arrow_back_black_24dp"
android:title=""
android:visible="false"
app:showAsAction="ifRoom" />
<item
android:id="@+id/next_page_button"
android:icon="@drawable/ic_arrow_forward_black_24dp"
android:title=""
app:showAsAction="ifRoom"
tools:ignore="PrivateResource" />
</menu>
这是我想更改可见性的活动“ previous_page_button”:
class MainActivity : AppCompatActivity() {
private lateinit var adapter: BeerAdapter
private val viewModel: MainViewModel by inject()
private var startPage = 1
private var pageSize = 25
private var currentPage = startPage
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initRecycler()
listOfBeers()
viewModel.onViewCreated(currentPage, pageSize)
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_page, menu)
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.next_page_button){
currentPage++
if (currentPage > 1){
findViewById<View>(R.id.previous_page_button).visibility = View.VISIBLE
}
initRecycler()
viewModel.onViewCreated(currentPage, pageSize)
} else if (item.itemId == R.id.previous_page_button){
currentPage--
initRecycler()
viewModel.onViewCreated(currentPage,pageSize)
}
return super.onOptionsItemSelected(item)
}
private fun listOfBeers(){
viewModel.beers.observe(this, Observer {
if (it.isNotEmpty()){
adapter.updateDataSet(it.toViewEntity())
}
})
}
private fun startBeerDetails(beerDetails: BeerDetailsView){
startActivity(Intent(this, BeerDetails::class.java).apply {
putExtra("BEER-DETAILS", beerDetails)
})
}
private fun initRecycler(){
recycler_view_main.layoutManager = GridLayoutManager(this, 1)
adapter = BeerAdapter(
onBeerClicked = {beer -> startBeerDetails(beer)}
)
recycler_view_main.adapter = adapter
}
}
findItem
而不是findViewById
尝试此操作private var optionMenu : Menu? = null
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_page, menu)
optionMenu = menu
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.next_page_button){
currentPage++
if (currentPage > 1){
optionMenu?.findItem(R.id.previous_page_button)?.visible = false
}
initRecycler()
viewModel.onViewCreated(currentPage, pageSize)
} else if (item.itemId == R.id.previous_page_button){
currentPage--
initRecycler()
viewModel.onViewCreated(currentPage,pageSize)
}
return super.onOptionsItemSelected(item)
}