我在我的Secondactivity中使用带有TabLayout工具栏的Viewpager。 在这些viewpager中使用Id"容器"我展示了四个片段: 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$1.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)
答案 0 :(得分:2)
如果您的片段位于视图寻呼机
内,请尝试getChildfragmentManager()
尝试以下代码
action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getChildFragmentManager().beginTransaction().replace(R.id.container, new VideoActivity()).addToBackStack(null).commit();
}
});
答案 1 :(得分:1)
使用以下代码替换您的片段;
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();
}
});
答案 2 :(得分:0)
我找到了解决问题的简便方法。 首先:非常感谢Vinayak B,他提到在ViewPagers中无法更改片段。
诀窍是你必须在viewpager中加载一个空片段,它只包含一个带有id的FrameLayout。
然后你在你的空片段的Java类中写:
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.IdOfYourFrameLayout, new FragmentActivity());
transaction.commit();
上看到本教程