android.view.InflateException:二进制XML文件行#2:RecyclerView没有LayoutManager

时间:2017-03-05 15:33:32

标签: java android xml

请帮助我,我才开始学习Android,真的不知道为什么这不起作用。它只是发送错误和所有。我尝试更改Manifest和activity_main.xml以及java文件,但没有任何反应。我真的想知道为什么它不起作用。如果有人能告诉我什么,我会很高兴的。 在我的代码下面

清单

<?xml version="1.0" encoding="utf-8"?>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

activity_main.xml中

<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">

MainActivity.java

public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FragmentManager fm = getSupportFragmentManager();
    MyFragment fragment = new MyFragment();
    fm.beginTransaction().add(R.id.activity_main,fragment).commit();
}}

MyFragment.java

public class MyFragment extends Fragment {
private RecyclerView recyclerView;
private Adapter adapters;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.activity_main,container,false);
    recyclerView=(RecyclerView)v.findViewById(R.id.activity_main);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    updateUI();
    return v;
}
private void updateUI()
{
    List<String> list = new ArrayList<>();
    for(int i=0;i<30;i++) list.add("Позиция № "+(i+1));
    adapters = new Adapter(list);
    recyclerView.setAdapter(adapters);
}
class Holder extends RecyclerView.ViewHolder
{
    private TextView textView;
    public Holder(View itemView) {
        super(itemView);
        textView=(TextView)itemView.findViewById(R.id.Text_view);
    }
}

class Adapter extends RecyclerView.Adapter<Holder>
{
    private List<String> list;
    public Adapter(List<String> List) {
        this.list=List;
    }
    @Override
    public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(getActivity());
        View v = inflater.inflate(android.R.layout.simple_list_item_1,parent,false);
        return new Holder(v);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    @Override
    public void onBindViewHolder(Holder holder, int position) {
        holder.textView.setText(list.get(position));
    }
}

这里是我的错误:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.mrpal.remembertwo, PID: 15159
              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mrpal.remembertwo/com.example.mrpal.remembertwo.MainActivity}: android.view.InflateException: Binary XML file line #2: RecyclerView has no LayoutManager
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
                  at android.app.ActivityThread.access$900(ActivityThread.java:153)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:5451)
                  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 #2: RecyclerView has no LayoutManager
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                  at com.example.mrpal.remembertwo.MyFragment.onCreateView(MyFragment.java:27)
                  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2189)
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
                  at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
                  at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:757)
                  at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2355)
                  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2146)
                  at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098)
                  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2008)
                  at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388)
                  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607)
                  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1238)
                  at android.app.Activity.performStart(Activity.java:6340)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2397)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
                  at android.app.ActivityThread.access$900(ActivityThread.java:153) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:148) 
                  at android.app.ActivityThread.main(ActivityThread.java:5451) 
                  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.IllegalStateException: RecyclerView has no LayoutManager
                  at android.support.v7.widget.RecyclerView.generateLayoutParams(RecyclerView.java:3906)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:502)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                  at com.example.mrpal.remembertwo.MyFragment.onCreateView(MyFragment.java:27) 
                  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2189) 
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) 
                  at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
                  at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:757) 
                  at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2355) 
                  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2146) 
                  at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098) 
                  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2008) 
                  at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388) 
                  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607) 
                  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1238) 
                  at android.app.Activity.performStart(Activity.java:6340) 
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2397) 
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
                  at android.app.ActivityThread.access$900(ActivityThread.java:153) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:148) 
                  at android.app.ActivityThread.main(ActivityThread.java:5451) 

1 个答案:

答案 0 :(得分:0)

确实有错误说。 recyclerView.setLayoutManager(new LinearLayoutManager(this));您可能会考虑尝试不同的构造函数参数,例如vertical orientation或reverse = false;

请阅读:https://guides.codepath.com/android/using-the-recyclerview

还有其他管理人员,如网格和交错网格布局。

请注意View v = inflater.inflate(R.layout.activity_main,container,false); //in the fragment

在活动中对此,请注意有什么奇怪的吗?

setContentView(R.layout.activity_main);
他们的布局确实相同。对主视图的布局做一些反思,然后为循环器视图进行充气。