【问题标题】:How to show recycler view on button pressed in Android Studio?如何在 Android Studio 中按下按钮时显示回收站视图?
【发布时间】:2020-06-30 03:20:49
【问题描述】:

我正在尝试在我的应用中包含搜索功能。因此,当用户按下搜索按钮时,结果会显示在回收站视图中。但是当用户按下按钮时,会弹出E/RecyclerView: No adapter attached; skipping layout 错误。在onCreate()方法中直接加载回收器没有错误。如何解决这个问题? 活动代码为:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivitySearchBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        binding.searchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               search_start();
            }
        });
    }
private void search_start(){
        binding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
        binding.recyclerView.setHasFixedSize(true);

            PagedList.Config config = new PagedList.Config.Builder()
                    .setEnablePlaceholders(false)
                    .setPrefetchDistance(2)
                    .setPageSize(5)
                    .build();
            Query mQuery;
            mQuery = FirebaseFirestore.getInstance().collection("tests");
            FirestorePagingOptions<SearchItem> options = new FirestorePagingOptions.Builder<SearchItem>()
                    .setLifecycleOwner(this)
                    .setQuery(mQuery, config, SearchItem.class)
                    .build();
            adapter = new SearchAdapter(options);
            binding.recyclerView.setAdapter(adapter);
    }

【问题讨论】:

  • 因为在创建时您没有将适配器设置为回收站视图。只需为适配器创建空列表并在创建时对其进行初始化。你说:“在 onCreate() 方法中直接加载回收器没有错误。”。错了,当您创建活动时,您的适配器尚未设置适配器。单击按钮时会设置 recyclerview

标签: android android-studio android-recyclerview


【解决方案1】:

只需在 OnCreate() 中设置适配器并在其中发送一个空列表

adapter = new SearchAdapter(options);
binding.recyclerView.setAdapter(adapter);

在您的适配器中创建一个 setList() 函数

void setList(FirestorePagingOptions<SearchItem> options){
    this.options = options;
}

然后在搜索按钮 ClickListener() 上设置列表

adapter.setList(options)

【讨论】:

    【解决方案2】:

    您可以在onCreate 中初始化 RecyclerView,但稍后在搜索功能中将数据提供给适配器。

    在适配器中,您可以有一个方法来获取数据并将其添加到适配器,并确保在添加数据后调用 notifyDataSetChanged() 以刷新 RecyclerView。

    内部适配器:

    public void addOptions(FirestorePagingOptions <SearchItem> options){
        this.options = options;
        notifyDataSetChanged();
    } 
    

    内部活动:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivitySearchBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
    
        initRecyclerView();
        setupEventHandlers();
    
    }
    
    private void initRecyclerView() {
        adapter = new SearchAdapter();
        binding.recyclerView.setAdapter(adapter);
    }
    
    private void setupEventHandlers() {
        binding.searchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                searchStart();
            }
        });
    }
    
    private void searchStart() {
        binding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
        binding.recyclerView.setHasFixedSize(true);
    
        PagedList.Config config = new PagedList.Config.Builder()
            .setEnablePlaceholders(false)
            .setPrefetchDistance(2)
            .setPageSize(5)
            .build();
        Query mQuery;
        mQuery = FirebaseFirestore.getInstance().collection("tests");
        FirestorePagingOptions < SearchItem > options = new FirestorePagingOptions.Builder < SearchItem > ()
            .setLifecycleOwner(this)
            .setQuery(mQuery, config, SearchItem.class)
            .build();
    
        adapter.addOptions(options);
    
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 2020-09-05
      • 2021-10-01
      • 1970-01-01
      • 2020-08-07
      相关资源
      最近更新 更多