简体   繁体   English

RecyclerView - 交替布局

[英]RecyclerView - Alternating layouts

I am very new at this, bear with me. 我很陌生,忍受我。 Here is my code for a simple RecyclerView. 这是我的简单RecyclerView的代码。 I would like to alternate between StaggeredGridLayout and LinearLayout in the LayoutManager. 我想在LayoutManager中交替使用StaggeredGridLayout和LinearLayout。

How I've initiated both layouts. 我是如何启动这两种布局的。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);

    staggeredGrid = new StaggeredGridLayoutManager(2, 1);
    cardView = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(staggeredGrid);

    List<ItemObjects> staggeredList = getListItemData();

    RecyclerViewAdapter adapter = new RecyclerViewAdapter(MainActivity.this, staggeredList);
    recyclerView.setAdapter(adapter);
}

How I've tried to alternate between them with a simple button for now. 我现在用一个简单的按钮尝试在它们之间交替。 I don't know if all the code is necessary, but I was informed that I am better off wiping out/null'ing the adapter every time it switches views, and rebuilding it. 我不知道所有的代码是否都是必要的,但我被告知每次切换视图并重建它时,我最好擦掉/去掉适配器。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.view_settings) {
        if (recyclerView.getLayoutManager() == staggeredGrid) {
            recyclerView.setAdapter(null);
            recyclerView.setLayoutManager(cardView);
            recyclerView.setAdapter(adapter);
            return true;
        }

        if (recyclerView.getLayoutManager() == cardView) {
            recyclerView.setAdapter(null);
            recyclerView.setLayoutManager(staggeredGrid);
            recyclerView.setAdapter(adapter);
            return true;
        }

    }

    return super.onOptionsItemSelected(item);
}

And the error. 而错误。

09-06 22:17:37.769 11853-11853/com.example.wsdw E/AndroidRuntime: FATAL EXCEPTION: main
                                                              Process: com.example.wsdw, PID: 11853
                                                              java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v7.widget.RecyclerView$LayoutManager android.support.v7.widget.RecyclerView.getLayoutManager()' on a null object reference
                                                                  at com.example.wsdw.MainActivity.onOptionsItemSelected(MainActivity.java:50)
                                                                  at android.app.Activity.onMenuItemSelected(Activity.java:2908)
                                                                  at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:406)
                                                                  at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195)
                                                                  at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103)
                                                                  at android.support.v7.app.AppCompatDelegateImplV9.onMenuItemSelected(AppCompatDelegateImplV9.java:667)
                                                                  at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:810)
                                                                  at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
                                                                  at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:957)
                                                                  at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:947)
                                                                  at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:616)
                                                                  at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:153)
                                                                  at android.view.View.performClick(View.java:5198)
                                                                  at android.view.View$PerformClick.run(View.java:21147)
                                                                  at android.os.Handler.handleCallback(Handler.java:739)
                                                                  at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                  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)

I could have done this completely wrong for all I know, but I'm looking for a starting point if anyone could help out. 对于我所知道的一切,我本可以做到这一点完全错误,但如果有人能提供帮助,我正在寻找一个起点。 Please and thank you. 谢谢,麻烦您了。

 RecyclerView recyclerView;
//Your Activity Name
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);

    staggeredGrid = new StaggeredGridLayoutManager(2, 1);
    cardView = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(staggeredGrid);

    List<ItemObjects> staggeredList = getListItemData();

    RecyclerViewAdapter adapter = new RecyclerViewAdapter(MainActivity.this, staggeredList);
    recyclerView.setAdapter(adapter);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.view_settings) {
        if (recyclerView.getLayoutManager() == staggeredGrid) {
            recyclerView.setAdapter(null);
            recyclerView.setLayoutManager(cardView);
            recyclerView.setAdapter(adapter);
            adapter. notifyDataSetChanged();
            return true;
        }

        if (recyclerView.getLayoutManager() == cardView) {
            recyclerView.setAdapter(null);
            recyclerView.setLayoutManager(staggeredGrid);
            recyclerView.setAdapter(adapter);
             adapter. notifyDataSetChanged();
            return true;
        }

    }

    return super.onOptionsItemSelected(item);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Android RecyclerView问题中的不同布局 - Different layouts in Android RecyclerView issue 具有未知/可变行布局的RecyclerView - RecyclerView with unknown/variable row layouts 如何在recyclerView中显示不同的布局? - How to show different layouts in recyclerView? RecyclerView显示来自2种不同布局的数据 - RecyclerView show data from 2 different layouts 如何解决在xml布局中的RecyclerView上消失的小部件? - How to solve widgets disappearing on RecyclerView in xml layouts? 如何在RecyclerView中创建异构布局? - How to create heterogeneous layouts inside RecyclerView? 为 RecyclerView 实现不同的布局,但在 onBindViewHolder 上获取类转换错误 - Implementing different layouts for RecyclerView but getting class cast erro on onBindViewHolder 使用带有GridLayoutManager的RecyclerView为手机和平板电脑的不同布局添加动态按钮 - Adding Dynamic Buttons to different layouts for phone and tablet using RecyclerView with GridLayoutManager RecyclerView 不会更新其项目的布局 - RecyclerView doesn't update his item's layouts 使用 multiView RecyclerView 将两行布局放置在彼此下方的问题? 包括截图 - Problem in positioning two row layouts one below each other with multiView RecyclerView? Screenshot included
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM