当我切换到另一个片段时,我的片段(在 Viewpager 内)变得空白

My Fragment (inside a Viewpager) gots blank when I switched to another fragment

我在我的 Secondactivity 中使用带有 TabLayout 工具栏的 Viewpager。 在这些带有 Id "container" 的 viewpager 中,我显示了四个片段: HomeActivity、PayActivity、VideoSectionsActivity 和 BillActivity。

在片段 VideoSectionsActivity 中,我有一个按钮,可以将 VideoSectionsActivity 的内容更改为 ActionActivity 的另一个内容。

更新:

如果你监督了这个,我想在 viewpager 中更改我的片段。

但是我的VideoSectionsActivity中的代码:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class VideoSectionsActivity extends Fragment {

    Button action;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View v = inflater.inflate(R.layout.fragment_video_sections, container, false);
        action = (Button) v.findViewById(R.id.genre_action);

        action.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getFragmentManager().beginTransaction().replace(R.id.container, new VideoActivity()).addToBackStack(null).commit();
            }
        });

        return v;
    }
}

效果不佳。如果我单击按钮,除了我的 HomeActivity 之外,我的所有片段都会变为空白。我使用了错误的代码还是应该在我的 SectionPagerAdapter 中做一些修改?

如果您需要更多代码,我必须在此处添加,请告诉我。

编辑:

如果我使用 getChildFragmentManager(),我收到此错误消息:

09-21 08:15:05.308 12931-12931/com.example.fdai3744.t_online20 E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                 Process: com.example.fdai3744.t_online20, PID: 12931
                                                                                 java.lang.IllegalArgumentException: No view found for id 0x7f0d008e (com.example.fdai3744.t_online20:id/container) for fragment VideoActivity{69c42ef #0 id=0x7f0d008e}
                                                                                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1293)
                                                                                     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:758)
                                                                                     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
                                                                                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
                                                                                     at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
                                                                                     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013)
                                                                                     at android.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:710)
                                                                                     at android.os.Handler.handleCallback(Handler.java:751)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                     at android.os.Looper.loop(Looper.java:154)
                                                                                     at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

使用以下代码替换您的片段;

action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
  Fragment fragment = new VideoActivity();
  FragmentManager fm = getActivity().getSupportFragmentManager();
  FragmentTransaction ft = fm.beginTransaction();
  ft.replace(R.id.container, fragment);
  ft.commit();
  }
});

试试 getChildfragmentManager() ,如果你的片段在 view pager

试试下面的代码

action.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getChildFragmentManager().beginTransaction().replace(R.id.container, new VideoActivity()).addToBackStack(null).commit();
        }
    });

我找到了解决问题的简单方法。 首先:非常感谢 Vinayak B,他提到不能在 ViewPagers 中更改片段。

诀窍是你必须在你的 viewpager 中加载一个空片段,它只包含一个带有 id 的 FrameLayout。

然后你在空片段的 Java class 中写入:

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.IdOfYourFrameLayout, new FragmentActivity());
    transaction.commit();

您还可以在以下网址查看此教程:http://www.pineappslab.com/post/fragments-viewpager/