首页 > 解决方案 > 无法返回视图,但只能在 onCreateView 方法(片段)中使用 recyclerview

问题描述

我计划在新的提要功能中添加一个浮动按钮。但是,在 onCreateView 方法期间,它只允许我返回 recycleview 而不是整个视图,它只返回片段上的 recycleview。

这是我在 onCreateView 方法中的代码

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    posts = new ArrayList<>();

    for(int i=9; i>=0; i--){
        posts.add(new Post("Testing"+i,"For testing","https://picsum.photos/600/300?random?"+i));
    }


    recyclerView = new RecyclerView(getContext());
    LinearLayoutManager lim = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(lim);
    pa = new PostAdapter(posts, this);
    recyclerView.setAdapter(pa);
    recyclerView.setItemAnimator(new DefaultItemAnimator());

    return recyclerView;
}

这就是我尝试返回整个视图时的做法

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    posts = new ArrayList<>();

    for(int i=9; i>=0; i--){
        posts.add(new Post("Testing"+i,"For testing","https://picsum.photos/600/300?random?"+i));
    }

    view = inflater.inflate(R.layout.fragment_chat, container, false);
    recyclerView = (RecyclerView) view.findViewById(R.id.strView);
    LinearLayoutManager lim = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(lim);
    pa = new PostAdapter(posts, this);
    recyclerView.setAdapter(pa);


    return view;
}

这是xml文件

<FrameLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/strView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/addStrBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:backgroundTint="@color/colorWhite"
    android:clickable="true"
    android:cropToPadding="false"
    android:elevation="@dimen/cardview_default_elevation"
    android:src="@drawable/baseline_create_black_18dp"
    app:fabSize="normal"/>

Logcat 同时尝试返回视图

06-20 20:53:57.733 4990-4990/com.example.cheejin.fyp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.cheejin.fyp, PID: 4990
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.cheejin.fyp/com.example.cheejin.fyp.HomePage}: android.view.InflateException: Binary XML file line #20: Binary XML file line #20: Error inflating class android.support.design.widget.FloatingActionButton
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 Caused by: android.view.InflateException: Binary XML file line #20: Binary XML file line #20: Error inflating class android.support.design.widget.FloatingActionButton
    at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    at com.example.cheejin.fyp.ChatFragment.onCreateView(ChatFragment.java:56)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2343)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1421)
    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1752)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1821)
    at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
    at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2595)
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2382)
    at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2337)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2244)
    at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3255)
    at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3205)
    at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:195)
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597)
    at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1237)
    at android.app.Activity.performStart(Activity.java:6253)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
 Caused by: android.view.InflateException: Binary XML file line #20: Error inflating class android.support.design.widget.FloatingActionButton
    at android.view.LayoutInflater.createView(LayoutInflater.java:645)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
    at com.example.cheejin.fyp.ChatFragment.onCreateView(ChatFragment.java:56) 
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2343) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1421) 
    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1752) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1821) 
    at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797) 
    at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2595) 
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2382) 
    at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2337) 
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2244) 
    at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3255) 
    at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3205) 
    at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:195) 
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597) 
    at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177) 
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1237) 
    at android.app.Activity.performStart(Activity.java:6253) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Constructor.newInstance(Native Method)
    at android.view.LayoutInflater.createView(LayoutInflater.java:619)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:835) 
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
    at com.example.cheejin.fyp.ChatFragment.onCreateView(ChatFragment.java:56) 
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2343) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1421) 
    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1752) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1821) 
    at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797) 
    at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2595) 
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2382) 
    at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2337) 
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2244) 
    at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3255) 
    at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3205) 
    at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:195) 
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597) 
    at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177) 
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1237) 
    at android.app.Activity.performStart(Activity.java:6253) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
    at android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.java:1723)
    at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:1792)
    at android.graphics.drawable.RippleDrawabl

标签: android

解决方案


我找到了解决方案....

参考这个链接 https://blog.csdn.net/Sean_css/article/details/68592412

只需将 android:backgroundTint="@color/colorPrimary" 更改为 app:backgroundTint="@color/colorPrimary"


推荐阅读