Android 使用RecyclerView时出错(未连接适配器;跳过布局)

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

我面临错误“RecyclerView:没有连接适配器;跳过布局”,我搜索了相关的解决方案,但错误仍然存在

我尝试在onCreate()方法中初始化视图和数据,但仍然得到相同的错误。我参考了代码,一些库在onCreateView()方法中初始化视图

活动的布局包含用于切换片段的tablayout和viewpager。 碎片列表就是其中之一

以下是我的部分代码:

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();