Android 使用RecyclerView时出错(未连接适配器;跳过布局)
我面临错误“RecyclerView:没有连接适配器;跳过布局”,我搜索了相关的解决方案,但错误仍然存在 我尝试在onCreate()方法中初始化视图和数据,但仍然得到相同的错误。我参考了代码,一些库在onCreateView()方法中初始化视图 活动的布局包含用于切换片段的tablayout和viewpager。 碎片列表就是其中之一 以下是我的部分代码:Android 使用RecyclerView时出错(未连接适配器;跳过布局),android,android-fragments,android-recyclerview,Android,Android Fragments,Android Recyclerview,我面临错误“RecyclerView:没有连接适配器;跳过布局”,我搜索了相关的解决方案,但错误仍然存在 我尝试在onCreate()方法中初始化视图和数据,但仍然得到相同的错误。我参考了代码,一些库在onCreateView()方法中初始化视图 活动的布局包含用于切换片段的tablayout和viewpager。 碎片列表就是其中之一 以下是我的部分代码: public class FragmentList extends Fragment { View view; SwipeRefreshL
public class FragmentList extends Fragment {
View view;
SwipeRefreshLayout swipeRefreshLayout;
AppCompatActivity activity;
RecyclerView list_container;
Adapter recyclerviewAdapter;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Activity a = getActivity();
if (a instanceof AppCompatActivity)
activity = (AppCompatActivity) a;
view = inflater.inflate(R.layout.fragment_list, container, false);
initViews();
return view;
}
private void initViews() {
swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swiperefreshlayout);
swipeRefreshLayout.setColorSchemeColors(getColor(R.color.colorAccentLight), getColor(R.color.colorAccent), getColor(R.color.colorAccentDark));
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
swipeRefreshLayout.setRefreshing(false);
}
});
list_container = (RecyclerView) view.findViewById(R.id.list_container);
list_container.setHasFixedSize(true);
LinearLayoutManager manager = new LinearLayoutManager(getContext());
manager.setOrientation(LinearLayoutManager.VERTICAL);
list_container.setLayoutManager(manager);
list_container.setItemAnimator(new DefaultItemAnimator());
List<Test> list = new ArrayList<>();
list.add(new Test(new String("0"), 0));
list.add(new Test(new String("1"), 1));
list.add(new Test(new String("2"), 3));
recyclerviewAdapter = new Adapter(list);
list_container.setAdapter(recyclerviewAdapter);
}
private int getColor(int res) {
return ContextCompat.getColor(getContext(), res);
}
class Adapter extends RecyclerView.Adapter<holder> {
List<Test> list;
public Adapter(List<Test> list) {
this.list = list;
}
public void add(Test test) {
list.add(test);
}
@Override
public holder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.d("", "onCreateViewHolder: " + viewType);
View vvv = LayoutInflater.from(parent.getContext()).inflate(R.layout.testlayout, parent, false);
return new holder(vvv);
}
@Override
public void onBindViewHolder(holder holder, int position) {
Log.d("", "onBindViewHolder: " + position);
holder.title.setText(list.get(position).str);
}
@Override
public int getItemCount() {
Log.d("", "getItemCount: " + list.size());
return list.size();
}
@Override
public int getItemViewType(int position) {
Log.d("", "getItemViewType: " + position);
return list.get(position).id;
}
}
static class holder extends RecyclerView.ViewHolder {
View view;
TextView title;
public holder(View itemView) {
super(itemView);
view = itemView;
title = (TextView) itemView.findViewById(R.id.text1);
}
}
class Test {
String str;
int id;
public Test(String str, int id) {
this.id = id;
this.str = str;
}
}
}
公共类FragmentList扩展了片段{
视图;
SwipeRefreshLayout SwipeRefreshLayout;
应用程序活动;
回收查看列表_容器;
适配器循环使用适配器;
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
活动a=getActivity();
if(AppCompatActivity的实例)
活动=(活动)a;
视图=充气机。充气(R.layout.fragment_列表,容器,错误);
initViews();
返回视图;
}
私有void initViews(){
swipeRefreshLayout=(swipeRefreshLayout)view.findViewById(R.id.swipeRefreshLayout);
swipeRefreshLayout.setColorSchemeColors(getColor(R.color.colorAccentLight)、getColor(R.color.ColorAccentLayout)、getColor(R.color.colorAccentDark));
swipeRefreshLayout.setOnRefreshListener(新的swipeRefreshLayout.OnRefreshListener()){
@凌驾
公共void onRefresh(){
swipeRefreshLayout.setRefreshing(false);
}
});
list\u container=(RecyclerView)view.findviewbyd(R.id.list\u container);
list_container.setHasFixedSize(true);
LinearLayoutManager=newlinearlayoutmanager(getContext());
manager.setOrientation(LinearLayoutManager.VERTICAL);
列出容器。setLayoutManager(管理器);
list_container.setItemAnimator(新的DefaultItemAnimator());
列表=新的ArrayList();
添加(新测试(新字符串(“0”),0));
添加(新测试(新字符串(“1”),1));
添加(新测试(新字符串(“2”),3));
RecycleServiceAdapter=新适配器(列表);
列出容器.setAdapter(RecycleServiceAdapter);
}
私有int-getColor(int-res){
返回ContextCompat.getColor(getContext(),res);
}
类适配器扩展了RecyclerView.Adapter{
名单;
公用适配器(列表){
this.list=列表;
}
公共无效添加(测试){
列表。添加(测试);
}
@凌驾
public holder onCreateViewHolder(视图组父级,int-viewType){
Log.d(“,”onCreateViewHolder:“+viewType”);
查看vvv=LayoutInflater.from(parent.getContext()).flate(R.layout.testlayout,parent,false);
返回新的支架(vvv);
}
@凌驾
公共无效onBindViewHolder(holder holder,内部位置){
Log.d(“,”onBindViewHolder:“+位置);
holder.title.setText(list.get(position.str));
}
@凌驾
public int getItemCount(){
Log.d(“,”getItemCount:“+list.size());
返回list.size();
}
@凌驾
public int getItemViewType(int位置){
Log.d(“,”getItemViewType:“+位置);
返回列表.get(position).id;
}
}
静态类持有者扩展了RecyclerView.ViewHolder{
视图;
文本视图标题;
公共持有人(查看项目视图){
超级(项目视图);
视图=项目视图;
title=(TextView)itemView.findViewById(R.id.text1);
}
}
课堂测试{
字符串str;
int-id;
公共测试(字符串str,int-id){
this.id=id;
this.str=str;
}
}
}
fragment_list.xml
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/mainlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/fragment_list_appbar" />
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swiperefreshlayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/list_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.v4.widget.SwipeRefreshLayout>
testlayout.xml用于viewholder的视图
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/text1"/>
</LinearLayout>
请告诉我问题出在哪里。谢谢
已更新
我更新了部分代码,其他代码保持不变。但这一观点没有显示任何东西
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Activity a = getActivity();
if (a instanceof AppCompatActivity)
activity = (AppCompatActivity) a;
view = inflater.inflate(R.layout.fragment_list, container, false);
swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swiperefreshlayout);
list_container = (RecyclerView) view.findViewById(R.id.list_container);
recyclerviewAdapter = new Adapter();
list_container.setAdapter(recyclerviewAdapter);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initViews();
}
private void initViews() {
//swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swiperefreshlayout);
swipeRefreshLayout.setColorSchemeColors(getColor(R.color.colorAccentLight), getColor(R.color.colorAccent), getColor(R.color.colorAccentDark));
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
swipeRefreshLayout.setRefreshing(false);
}
});
//list_container = (RecyclerView) view.findViewById(R.id.list_container);
list_container.setHasFixedSize(true);
LinearLayoutManager manager = new LinearLayoutManager(getContext());
manager.setOrientation(LinearLayoutManager.VERTICAL);
list_container.setLayoutManager(manager);
list_container.setItemAnimator(new DefaultItemAnimator());
List<Test> list = new ArrayList<>();
list.add(new Test(new String("0"), 0));
list.add(new Test(new String("1"), 1));
list.add(new Test(new String("2"), 3));
//recyclerviewAdapter = new Adapter();
recyclerviewAdapter.add(list);
recyclerviewAdapter.notifyDataSetChanged();
//list_container.setAdapter(recyclerviewAdapter);
}
private int getColor(int res) {
return ContextCompat.getColor(getContext(), res);
}
class Adapter extends RecyclerView.Adapter<holder> {
List<Test> list = new ArrayList<>();
public Adapter() {
}
public void add(Test test) {
list.add(test);
}
public void add(List<Test> test) {
list.addAll(test);
}
@Override
public holder onCreateViewHolder(ViewGroup parent, int viewType) {
if (list == null || list.size() == 0) return null;
Log.e("", "onCreateViewHolder: " + viewType);
View vvv = LayoutInflater.from(parent.getContext()).inflate(R.layout.testlayout, parent, false);
holder hh = new holder(vvv);
return hh;
}
@Override
public void onBindViewHolder(holder holder, int position) {
if (holder == null) return;
Log.e("", "onBindViewHolder: " + position);
holder.title.setText(list.get(position).str);
}
@Override
public int getItemCount() {
Log.e("", "getItemCount: " + list.size());
return list.size();
}
@Override
public int getItemViewType(int position) {
Log.e("", "getItemViewType: " + position);
return list.get(position).id;
}
}
@覆盖
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
活动a=getActivity();
if(AppCompatActivity的实例)
活动=(活动)a;
视图=充气机。充气(R.layout.fragment_列表,容器,错误);
swipeRefreshLayout=(swipeRefreshLayout)view.findViewById(R.id.swipeRefreshLayout);
list\u container=(RecyclerView)view.findviewbyd(R.id.list\u container);
RecycleServiceAdapter=新适配器();
列出容器.setAdapter(RecycleServiceAdapter);
返回视图;
}
@凌驾
ActivityCreated上的公共无效(@Nullable Bundle savedinStateCState){
super.onActivityCreated(savedInstanceState);
initViews();
}
私有void initViews(){
//swipeRefreshLayout=(swipeRefreshLayout)view.findViewById(R.id.swipeRefreshLayout);
swipeRefreshLayout.setColorSchemeColors(getColor(R.color.colorAccentLight)、getColor(R.color.ColorAccentLayout)、getColor(R.color.colorAccentDark));
swipeRefreshLayout.setOnRefreshListener(新的swipeRefreshLayout.OnRefreshListener()){
@凌驾
公共void onRefresh(){
swipeRefreshLayout.setRefreshing(false);
}
});
//list\u container=(RecyclerView)view.findviewbyd(R.id.list\u container);
list_container.setHasFixedSize(true);
LinearLayoutManager=newlinearlayoutmanager(getContext());
manager.setOrientation(LinearLayoutManager.VERTICAL);
列出容器。setLayoutManager(管理器);
list_container.setItemAnimator(新的DefaultItemAnimator());
列表=新的ArrayList();
添加(新测试(新字符串(“0”),0));
添加(新测试(新字符串(“1”),1));
添加(新测试(新字符串(“2”),3));
//RecycleServiceAdapter=新适配器();
RecycleServiceAdapter.add(列表);
RecycleServiceAdapter.notifyDataSetChanged();
//列出容器.setAdapter(RecycleServiceAdapter);
}
私有int-getColor(int-res){
返回ContextCompat.getColor(getContext(),res);
}
类适配器扩展了RecyclerView.Adapt
//Global Declaration;
List<Text> list=new ArrayList<>();
LinearLayoutManager linearLayoutManager;
RecyclerView recyclerView;
//Inside onActivityCreated
linearLayoutManager = new LinearLayoutManager(getActivity);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(linearLayoutManager);
mAdapter = new Adapter(list);
recyclerView.setAdapter(mAdapter);
//Do your list.add here then notify adapter
mAdapter.notifyDataSetChanged();