我正在尝试使用Fragment ViewPager
使用FragmentPagerAdapter
.我想要实现的是将位于第一页上的片段替换为另一片段ViewPager
.
寻呼机由两页组成.第一个是FirstPagerFragment
,第二个是SecondPagerFragment
.单击第一页的按钮.我想FirstPagerFragment
用NextFragment 替换它.
我的代码如下.
public class FragmentPagerActivity extends FragmentActivity {
static final int NUM_ITEMS = 2;
MyAdapter mAdapter;
ViewPager mPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_pager);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
}
/**
* Pager Adapter
*/
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int …
Run Code Online (Sandbox Code Playgroud) 我需要有关片段内部片段的帮助,实际上我在按下后退按钮时遇到问题.应用主屏幕具有按钮和按下每个按钮上考虑到与新的片段替换(和该片段包含另一个片段内),动态地添加/更换片段工作正常,通过按压按钮1片段代替,按压按钮时发生同样的情况,但是,如果我按按钮再次出现异常:
"Duplicate id 0x7f05000a, tag null, or parent id 0x7f050009 with
another fragment for com........ fragmentname"
Run Code Online (Sandbox Code Playgroud)
意味着片段或内部片段已经添加,我试图再次添加它们,任何人都知道如何使用片段内部片段和来回移动没有任何问题,感谢支持.
MainActivity,其中片段是动态添加和替换的.
public class FragmentInsideFragmentTestActivity extends Activity {
private Button button1;
private Button button2;
private Button button3;
private Button button4;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button1 =(Button) this.findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
onButtonClick(view);
}
});
button2 =(Button) this.findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
onButtonClick(view);
} …
Run Code Online (Sandbox Code Playgroud) 在Android 4.2中,支持库获得了对嵌套片段的支持,请参见此处.我玩过它并发现了一个有关back stack和getChildFragmentManager()的有趣行为/ bug .当使用getChildFragmentManager()和addToBackStack(String name)时,通过按下后退按钮,系统不会将后栈运行到前一个片段.另一方面,当使用getFragmentManager()和addToBackStack(String name)时,按下后退按钮,系统将返回上一个片段.
对我来说,这种行为是出乎意料的.通过按下设备上的后退按钮,即使片段被添加到子节点片段管理器中的后栈,我也希望弹出最后添加到后栈的片段.
这种行为是否正确?这种行为是个错误吗?这个问题有解决方法吗?
public class FragmentceptionActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
final FrameLayout wrapper1 = new FrameLayout(this);
wrapper1.setLayoutParams(new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT));
wrapper1.setId(1);
final FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT);
params.topMargin = 0;
final TextView text = new TextView(this);
text.setLayoutParams(params);
text.setText("fragment 1");
wrapper1.addView(text);
setContentView(wrapper1);
getSupportFragmentManager().beginTransaction().addToBackStack(null)
.add(1, new Fragment1()).commit();
}
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, …
Run Code Online (Sandbox Code Playgroud) 我有一个片段(我会称之为pagerFragment
),它被添加到后台并且可见.它拥有viewPager
一个FragmentPagerAdapter
.在FragmentPagerAdapter
持有(假设)两个片段:A和B.
首先添加片段效果很好.
片段A有一个按钮,一旦点击,就会在后台堆叠中添加一个片段(C).
问题是:如果我添加该片段(C),然后单击返回,pagerAdapter
则为空,我看不到里面的任何片段.
如果我使用hack,并破坏pagerFragment
s中的子片段(A和B)onDestroyView()
,这解决了问题,虽然我不想使用这个hack.
任何想法可能是什么问题?
android android-fragments android-viewpager fragmentpageradapter back-stack