0
我想从后面的堆栈中重用片段,即隐藏并显示它是否存在于后台堆栈中。这里是我的代码:隐藏并显示片段,片段视图不可见
活动:`
public class MyActivity extends Activity implements View.OnClickListener{
Button b1;
Button b2;
Button b3;
Button b4;
FrameLayout frameLayout;
FrameLayout frameLayout2;
BlankFragment fragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
b1=(Button)findViewById(R.id.button1);
b2=(Button)findViewById(R.id.button2);
b3=(Button)findViewById(R.id.button3);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
b3.setOnClickListener(this);
frameLayout =(FrameLayout)findViewById(R.id.frame1);
frameLayout2 =(FrameLayout)findViewById(R.id.frame2);
getFragmentManager().addOnBackStackChangedListener(listener);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button1:{
manageFragment(1);
break;
}
case R.id.button2:{
manageFragment(2);
break;
}
case R.id.button3:{
manageFragment(3);
break;
}
}
}
private void manageFragment(int i) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
BlankFragment blankFragment = (BlankFragment)manager.findFragmentByTag(""+i);
if(blankFragment !=null){
Log.v("123456","found the fragment in stack");
transaction.hide(fragment);
transaction.show(blankFragment);
transaction.commitAllowingStateLoss();
//if(i!=1){
//frameLayout2.setVisibility(View.GONE);
//frameLayout.setVisibility(View.VISIBLE);
//frameLayout.bringToFront();
//}else {
//frameLayout2.setVisibility(View.VISIBLE);
//frameLayout.setVisibility(View.GONE);
//frameLayout2.bringToFront();
}
fragment =blankFragment;
return;
}
fragment = BlankFragment.newInstance("", "" + i);
// if(i!=1){
// transaction.replace(R.id.frame1,fragment,""+i);
// frameLayout2.setVisibility(View.GONE);
// frameLayout.setVisibility(View.VISIBLE);
// frameLayout.bringToFront();
// }else{
// transaction.replace(R.id.frame2,fragment,""+i);
// frameLayout2.setVisibility(View.VISIBLE);
// frameLayout.setVisibility(View.GONE);
// frameLayout2.bringToFront();
// }
transaction.replace(android.R.id.content,fragment,""+i);
transaction.setTransition(FragmentTransaction.TRANSIT_NONE);
transaction.addToBackStack(""+i);
transaction.commitAllowingStateLoss();
}
FragmentManager.OnBackStackChangedListener listener = new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
int i =getFragmentManager().getBackStackEntryCount();
Log.v("123456","backstag count : "+i);
}
};
}
`
//为注释代码的解释。 由于我有两个容器,我可以隐藏和显示(检索)只有2个fragments.As我的第三个碎片容器被重用,它的视图不显示。
所以我尝试使用android容器,并且根本不能显示来自雄鹿的片段。
如何从堆栈中检索所有的片段(这里是计数3,可能是N个片段),我想隐藏并显示片段不弹出。
为什么不使用'transaction.replace'? – 2014-09-30 05:17:03
它将分离并重新附加。视图将再次加载,我不想再次加载它 – Meher 2014-09-30 05:17:52