禁用 BrowseFragment 中的标头

And*_*ets 5 java android android-fragments android-tv leanback

我需要禁用BrowseFragment中的标头,然后添加到ArrayObjectAdapter卡。当我做一个setHeadersState(HEADERS_DISABLED)应用程序时会崩溃。如果我setHeadersState(HEADERS_DISABLED)稍后运行方法,例如在onLoadFinished,应用程序不会崩溃,但标题栏立即可见然后隐藏,而不是每次在适配器中显示项目时。

\n\n

MainFragment.class

\n\n
 public class MainFragment extends BrowseFragment implements LoaderManager.LoaderCallbacks<List<Module>> {\n        private static final int MODULES_LOADER_ID = 100;\n        private ArrayObjectAdapter mRowsAdapter;\n        @Override\n        public void onActivityCreated(Bundle savedInstanceState) {\n            super.onActivityCreated(savedInstanceState);\n            setupUIElements();\n            setupRowAdapter();\n            setupListeners();\n            getLoaderManager().initLoader(MODULES_LOADER_ID, null, this);\n        }\n            private void setupUIElements() {\n            setTitle(getActivity().getString(R.string.app_name));\n            setBadgeDrawable(getResources().getDrawable(R.drawable.title, getActivity().getTheme()));\n            setHeadersTransitionOnBackEnabled(false);\n            setBrandColor(getActivity().getResources().getColor(R.color.fastlane_background));\n            setHeadersState(HEADERS_DISABLED);\n        }\n            private void setupRowAdapter() {\n            mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());\n            setAdapter(mRowsAdapter);\n        }\n            private void setupListeners() {\n            setOnItemViewSelectedListener(new ItemViewSelectedListener());\n            setOnItemViewClickedListener(new ItemViewClickedListener());\n        }\n            private void loadModules(List<Module> modules) {\n            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new ModulesCardPresenter());\n            for (Module module : modules) {\n                listRowAdapter.add(module);\n            }\n            HeaderItem header = new HeaderItem(0, "\xd0\x9c\xd0\xb5\xd0\xbd\xd1\x8e");\n            mRowsAdapter.add(new ListRow(header, listRowAdapter));\n        }\n        @Override\n        public Loader<List<Module>> onCreateLoader(int id, Bundle args) {\n            switch (id) {\n                case MODULES_LOADER_ID:\n                    return new ModulesLoader(getActivity());\n                default:\n                    return null;\n            }\n        }\n        @Override\n        public void onLoadFinished(Loader<List<Module>> loader, List<Module> data) {\n            switch (loader.getId()) {\n                case MODULES_LOADER_ID:\n                    loadModules(data);\n                    break;\n            }\n        }\n        @Override\n        public void onLoaderReset(Loader<List<Module>> loader) {\n        }\n        static class ModulesLoader extends SimpleAsyncTaskLoader<List<Module>> {\n            public ModulesLoader(Context context) {\n                super(context);\n            }\n            @Override\n            public List<Module> loadInBackground() {\n                Call<Modules> mCall = ServiceHolder.getService()\n                        .getModules(Constants.GET_MODULES_REQUEST);\n                try {\n                    return mCall.execute().body().getModules();\n                } catch (Exception e) {\n                    e.printStackTrace();\n                    return Collections.EMPTY_LIST;\n                }\n            }\n        }\n        private final class ItemViewSelectedListener implements OnItemViewSelectedListener {\n            @Override\n            public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,\n                                       RowPresenter.ViewHolder rowViewHolder, Row row) {\n            }\n        }\n        private final class ItemViewClickedListener implements OnItemViewClickedListener {\n            @Override\n            public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,\n                                      RowPresenter.ViewHolder rowViewHolder, Row row) {\n                }\n        }\n
Run Code Online (Sandbox Code Playgroud)\n\n

日志:

\n\n
08-18 16:06:08.331 29647-29647/ E/AndroidRuntime: FATAL EXCEPTION: main\n    Process: , PID: 29647\n    **java.lang.RuntimeException: Unable to start activity ComponentInfo{.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method \'android.view.View android.app.Fragment.getView()\' on a null object reference**\n    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)\n    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)\n    at android.app.ActivityThread.-wrap11(ActivityThread.java)\n    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)\n    at android.os.Handler.dispatchMessage(Handler.java:102)\n    at android.os.Looper.loop(Looper.java:148)\n    at android.app.ActivityThread.main(ActivityThread.java:5417)\n    at java.lang.reflect.Method.invoke(Native Method)\n    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\n    **Caused by: java.lang.NullPointerException: Attempt to invoke virtual method \'android.view.View android.app.Fragment.getView()\' on a null object reference**\n    at android.support.v17.leanback.app.BrowseFragment.onStart(BrowseFragment.java:1511)\n    at android.app.Fragment.performStart(Fragment.java:2244)\n    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1002)\n    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)\n    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1130)\n    at android.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:1958)\n    at android.app.FragmentController.dispatchStart(FragmentController.java:163)\n    at android.app.Activity.performStart(Activity.java:6274)\n    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)\n    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)\n    at android.app.ActivityThread.-wrap11(ActivityThread.java)\xc2\xa0\n    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)\n    at android.os.Handler.dispatchMessage(Handler.java:102)\xc2\xa0\n    at android.os.Looper.loop(Looper.java:148)\xc2\xa0\n    at android.app.ActivityThread.main(ActivityThread.java:5417)\n    at java.lang.reflect.Method.invoke(Native Method)\n    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\xc2\xa0</code>\n
Run Code Online (Sandbox Code Playgroud)\n

Kyl*_*enn 1

setHeadersState(HEADERS_DISABLED)我的片段方法中有onCreate()。看来你有你的onActivityCreated()。你应该尝试移动它。让我知道这是否有效。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHeadersState(HEADERS_DISABLED)
}
Run Code Online (Sandbox Code Playgroud)