小编Mig*_*tón的帖子

FragmentStatePageAdapter复制ActionBar菜单项

我有FragmentStatePageAdapter(我用作ViewPager的适配器)和操作栏中的菜单项的问题.

当我启动应用程序时,一切都很好.如果我将任务移动到后台(例如,按下HOME按钮),我开始做东西,直到活动结束,然后当我回到我的应用程序(通过启动器或我创建的通知)一切都很好,除了有操作栏中的重复菜单项.

一个重要的细节是,唯一重复的项是在ViewPager中使用的每个片段的onCreateOptionsMenu()中创建的项.

如果我用FragmentPageAdapter替换FragmentStatePageAdapter,则不再复制项目,但是ViewPager中没有显示片段(从不调用适配器的getItem()函数,因此它不会返回任何片段).

有任何想法吗?一种避免FragmentStatePageAdapter复制菜单项的方法?也许使用FragmentPageAdapter,但有一个修改来显示片段?我片段的修改?

以下是我的应用程序中的一些代码片段...

如何在片段内创建菜单项:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    /* Create play button */
    final MenuItem mPlay = menu.add(R.string.play_all);

    mPlay.setIcon(R.drawable.ic_play_all);
    mPlay.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

    mPlay.setOnMenuItemClickListener(new OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            final List<Song> songs = getSongs();

            if (songs.size() == 0) {
                /* Show message */
                Toast.makeText(mContext, R.string.no_song_list, Toast.LENGTH_LONG).show();
            } else {
                /* Play song list */
                try { PlayManager.getService().playList(songs); } catch (Exception e) {}
            }

            return false;
        }
    });

    /* Create menu */
    super.onCreateOptionsMenu(menu, inflater); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

9
推荐指数
1
解决办法
3213
查看次数

StaggeredGridLayoutManager 中的 NullPointerException

我收到了一些关于 StaggeredGridLayoutManager 中发生的 NullPointerException 的崩溃报告。看起来我的用户中有大约 10% 遇到了这个问题。

我有一个非常基本的 RecyclerView 和一个基本的适配器,没什么特别的,我确实尝试在我的设备中重现这个错误,但完全没有运气。

这是我收到的原始报告:

java.lang.NullPointerException
   at android.support.v7.widget.StaggeredGridLayoutManager.recycleFromStart(StaggeredGridLayoutManager.java:1661)
   at android.support.v7.widget.StaggeredGridLayoutManager.recycle(StaggeredGridLayoutManager.java:1529)
   at android.support.v7.widget.StaggeredGridLayoutManager.fill(StaggeredGridLayoutManager.java:1471)
   at android.support.v7.widget.StaggeredGridLayoutManager.scrollBy(StaggeredGridLayoutManager.java:1846)
   at android.support.v7.widget.StaggeredGridLayoutManager.scrollVerticallyBy(StaggeredGridLayoutManager.java:1764)
   at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:3062)
   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803)
   at android.view.Choreographer.doCallbacks(Choreographer.java:603)
   at android.view.Choreographer.doFrame(Choreographer.java:572)
   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:789)
   at android.os.Handler.handleCallback(Handler.java:733)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:157)
   at android.app.ActivityThread.main(ActivityThread.java:5335)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
   at dalvik.system.NativeStart.main(NativeStart.java)
Run Code Online (Sandbox Code Playgroud)

我不知道发生了什么。我想也许我在布局管理器之前设置了适配器,但不,事实并非如此。

我希望有人可以对此有所了解。

提前致谢!

更新:

我正在从我的应用程序中复制一些与 RecyclerView 相关的代码。

此代码来自片段:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    RecyclerView.LayoutManager layout = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL)

    mRecyclerView = (RecyclerView)view.findViewById(R.id.recyclerView);
    mRecyclerView.setLayoutManager(layout);
    mRecyclerView.setAdapter(mAdapter);
} …
Run Code Online (Sandbox Code Playgroud)

java android staggeredgridlayout android-recyclerview

5
推荐指数
1
解决办法
1081
查看次数