And*_*ets 5 java android android-fragments android-tv leanback
我需要禁用BrowseFragment中的标头,然后添加到ArrayObjectAdapter卡。当我做一个setHeadersState(HEADERS_DISABLED)应用程序时会崩溃。如果我setHeadersState(HEADERS_DISABLED)稍后运行方法,例如在onLoadFinished,应用程序不会崩溃,但标题栏立即可见然后隐藏,而不是每次在适配器中显示项目时。
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 }\nRun Code Online (Sandbox Code Playgroud)\n\n日志:
\n\n08-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>\nRun Code Online (Sandbox Code Playgroud)\n
setHeadersState(HEADERS_DISABLED)我的片段方法中有onCreate()。看来你有你的onActivityCreated()。你应该尝试移动它。让我知道这是否有效。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHeadersState(HEADERS_DISABLED)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3134 次 |
| 最近记录: |