android - E/RecyclerView:没有附加适配器;跳过布局(MainActivity 到 HomeFragment)
问题描述
如何将这些活动从 MainActivity 移动到 HomeFragment?我可以通过在 Home 片段中创建新类来移动吗?
我试图通过创建新类来移动,HomeFragment2
如下所示
package com.domachita.jsdict.ui.home;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.support.annotation.Nullable;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.arch.lifecycle.Observer;
import android.arch.lifecycle.ViewModelProviders;
import com.domachita.jsdict.Adapter.SearchAdapter;
import com.domachita.jsdict.Database.Database;
import com.domachita.jsdict.R;
import com.mancj.materialsearchbar.MaterialSearchBar;
import java.util.ArrayList;
import java.util.List;
public class HomeFragment extends Fragment{
private HomeViewModel homeViewModel;
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
homeViewModel =
ViewModelProviders.of(this).get(HomeViewModel.class);
View root = inflater.inflate(R.layout.fragment_home, container, false);
final TextView textView = root.findViewById(R.id.text_home);
homeViewModel.getText().observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
return root;
}
}
class HomeFragment2 extends AppCompatActivity {
RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
SearchAdapter adapter;
MaterialSearchBar materialSearchBar;
List<String> suggestList = new ArrayList<>();
Database database;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//init view
recyclerView = (RecyclerView)findViewById(R.id.recycler_search);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
materialSearchBar = (MaterialSearchBar)findViewById(R.id.search_bar);
//init DB
database = new Database(this);
//Setup search bar
materialSearchBar.setHint("検索したい語句を入力");
materialSearchBar.addTextChangeListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
List<String> suggest = new ArrayList<>();
for (String search:suggestList)
{
if (search.toLowerCase().contains(materialSearchBar.getText().toLowerCase()))
suggest.add(search);
}
materialSearchBar.setLastSuggestions(suggest);
}
@Override
public void afterTextChanged(Editable s) {
}
});
materialSearchBar.setOnSearchActionListener(new MaterialSearchBar.OnSearchActionListener() {
@Override
public void onSearchStateChanged(boolean enabled) {
if (enabled)
recyclerView.setAdapter(adapter);
}
@Override
public void onSearchConfirmed(CharSequence text) {
startSearch(text.toString());
}
@Override
public void onButtonClicked(int buttonCode) {
}
});
//Init Adapter default set all result
adapter = new SearchAdapter(this,database.getDicts());
recyclerView.setAdapter(adapter);
}
private void startSearch(String text) {
adapter = new SearchAdapter(this,database.getDictByJapanese(text));
recyclerView.setAdapter(adapter);
}
}
列表没有出现,我有这个错误
E/RecyclerView: No adapter attached; skipping layout
我已经修改了很多但无法解决这个问题。
提前致谢!
解决方案
在您的 oncreate() 或您的方法上方添加此行:
adapter = new SearchAdapter(this,database.getDicts());
recyclerView.setAdapter(adapter)
推荐阅读
- apache-spark - 4 个主题的 Kafka 消费者代码
- c++ - 奇怪的体素锥追踪结果
- angular - 利用浏览器缓存 - 带有 CDN 的 nginx
- c# - 如何访问 Lambda 环境变量?
- java - Spring Kafka 类不在可信包中
- sql - 刷新 SQL Server 表
- javascript - 使用 react js 渲染 youtube 视频
- android - 在 RecyclerView 中的 Firebase 数据库引用侦听器上禁用 Like 按钮
- javascript - 将 javascript 消息框结果发送到后面的代码
- c# - C# 以采样率 x 通过 n 个数字有效地线性插值