当我切换到另一个片段时,我的片段(在 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/
我在我的 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/