【问题标题】:RecyclerView shows up only after an icon is pressedRecyclerView 仅在按下图标后显示
【发布时间】:2019-10-03 20:08:28
【问题描述】:

当我进入应该具有 RecyclerView 的活动时,它不会立即显示 RecyclerView。出于某种原因,它仅在我按下 SearchView 图标后才会显示 RecyclerView。

After I press the search iconBefore I press the search icon。 这是我的 RecyclerView 适配器:

class BlogRecyclerAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
        super.onAttachedToRecyclerView(recyclerView)
        var con = recyclerView.context
    }


     var items: List<BlogPost> = ArrayList()

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        return BlogViewHolder(
            LayoutInflater.from(parent.context).inflate(R.layout.user_row, parent, false)
            )
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        when(holder) {

            is BlogViewHolder ->{
                holder.bind(items.get(position))
            }
        }
    }


    override fun getItemCount(): Int {
        return items.size
    }

    fun submitList(blogList: List<BlogPost>){
        items = blogList
    }

    class BlogViewHolder constructor(
        itemView: View
    ): RecyclerView.ViewHolder(itemView){
        val phoneButton = itemView.phoneButton
        val locationButton = itemView.locationButton
        val nameButton = itemView.nameButton

        fun bind(blogPost: BlogPost){

            //שם
            nameButton.setText(blogPost.name)

            //אפטר
            if(blogPost.place=="after"){
                locationButton.setBackgroundColor(Color.parseColor("#F03434"))
                locationButton.setText("אפטר")
            }
    }
}

这是应该显示 RecyclerView 并且还包含搜索栏的 Activity:

class Tavla : AppCompatActivity() {

    private lateinit var blogAdapter: BlogRecyclerAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_tavla)

        initRecycelrView()
        addDataset()

    }

   //The method which the search button calls
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.main_menu, menu)
       val item = menu!!.findItem(R.id.action_search)
        val searchView = item.actionView as androidx.appcompat.widget.SearchView
        return super.onCreateOptionsMenu(menu)
    }

    private fun addDataset(){
        val data = DataSource.createDataSet()
        blogAdapter.submitList(data)
    }

    private fun initRecycelrView(){
        recyclerView.apply {
            recyclerView.layoutManager = LinearLayoutManager(this@Tavla)
            val topSpacingDecoration = TopSpacingItemDecoration(30)
            addItemDecoration(topSpacingDecoration)
            blogAdapter = BlogRecyclerAdapter()
            adapter = blogAdapter
        }
    }
}

我从“数据源”获取列表

【问题讨论】:

  • 搜索按钮调用了什么方法?
  • onCreateOptionsMenu

标签: android kotlin adapter android-recyclerview


【解决方案1】:

尝试在onCreate中的addDataset()下方添加blogAdapter.notifyDataSetChanged()

这样它就会通知适配器在加载活动时数据已更改。

【讨论】:

    【解决方案2】:

    将此粘贴​​到 oncreate 方法中。

    addDataset() initRecycelrView()

    【讨论】:

    • 我在其他评论中添加了您告诉我要添加的行,但我不明白如何按照您在此评论中告诉我的操作。你能像在其他评论中那样编写代码并指导我把它放在哪里吗?
    猜你喜欢
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多