顧曲周郎 2016-06-08 07:09 采纳率: 0%
浏览 1706
已结题

安卓求助,activity中fragment替换问题

新手一枚,听说这里大神很多,特来求助

主界面activity里底部是包含4个radiobutton的导航栏,4个button对应四个fragment。
现在要做的是,第四个button对应是登录界面fragment,登录后替换录界面fragment显示个人信息界面的fragment。
我代码写出来后,替换后第一个button和第四个button对应的fragment都变成了 个人信息界面的button,而且从其他跳转到主界面的activity时,第四个button对应的fragment又变成了登录界面fragment了。不知道我描述清楚不,请大神帮忙看下代码,问题出在哪里了。
主界面activity代码如下。
public class MainActivity extends FragmentActivity {
private RadioButton rb_index,rb_pro,rb_find,rb_me;
private FindFragment findFragment;
private LoginFragment loginFragment;
private ProjectFragment projectFragment;
private IndexFragment indexFragment;
private MycenterFragment mycenterFragment;
public FrameLayout fragment_container;
private long exitTime = 0;
private FragmentManager fManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    fManager = getSupportFragmentManager();
    getView();
    setView();

// 设置rb_index默认选中
rb_index.performClick();
}

//获取控件
private void getView() {
rb_index= (RadioButton) findViewById(R.id.rb_index);
rb_pro= (RadioButton) findViewById(R.id.rb_pro);
rb_find = (RadioButton) findViewById(R.id.rb_find);
rb_me= (RadioButton) findViewById(R.id.rb_me);
fragment_container= (FrameLayout) findViewById(R.id.fragment_container);
}
// 设置监听
private void setView() {
MyListener myListener =new MyListener();
rb_index.setOnClickListener(myListener);
rb_pro.setOnClickListener(myListener);
rb_find.setOnClickListener(myListener);
rb_me.setOnClickListener(myListener);
}
//重置所有button的选中状态
private void setSelected(){
rb_index.setSelected(false);
rb_pro.setSelected(false);
rb_find.setSelected(false);
rb_me.setSelected(false);
}

//隐藏所有Fragment
private void hideAllFragment(FragmentTransaction fragmentTransaction){
    if(findFragment != null){fragmentTransaction.hide(findFragment);}
    if(loginFragment != null){fragmentTransaction.hide(loginFragment);}
    if(projectFragment != null){fragmentTransaction.hide(projectFragment);}
    if(indexFragment != null){fragmentTransaction.hide(indexFragment);}
    if(mycenterFragment != null){fragmentTransaction.hide(mycenterFragment);}
}

class MyListener implements OnClickListener {
    @Override
    public void onClick(View v) {
        FragmentTransaction fTransaction = fManager.beginTransaction();
        hideAllFragment(fTransaction);
        switch (v.getId()) {
        case R.id.rb_index:
            setSelected();
            rb_index.setSelected(true);
               if(indexFragment == null){
                   indexFragment = new IndexFragment();
                    fTransaction.add(R.id.fragment_container,indexFragment);
                }else{
                    fTransaction.show(indexFragment);
                }
            break;
        case R.id.rb_pro:
            setSelected();
            rb_pro.setSelected(true);
               if(projectFragment == null){
                   projectFragment = new ProjectFragment();
                    fTransaction.add(R.id.fragment_container,projectFragment);
                }else{
                    fTransaction.show(projectFragment);
                }
            break;
        case R.id.rb_find:
            setSelected();
            rb_find.setSelected(true);
               if(findFragment == null){
                   findFragment = new FindFragment();
                    fTransaction.add(R.id.fragment_container,findFragment);
                }else{
                    fTransaction.show(findFragment);
                }
            break;
        case R.id.rb_me:
            setSelected();

               if(loginFragment == null){
                   loginFragment = new LoginFragment();
                    fTransaction.add(R.id.fragment_container,loginFragment);
                }else{
                    fTransaction.show(loginFragment);
                }

            break;
        }
          fTransaction.commit();
    } 
}

登录界面fragment中替换fragment部分的代码如下
//个人信息fragment
MycenterFragment mycenterFragment =new MycenterFragment();
//登录界面的fragment
LoginFragment loginFragment=new LoginFragment();
// 开启事务
FragmentTransaction transaction =getFragmentManager().beginTransaction();
// 设置动画效果
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.replace(R.id.fragment_container, mycenterFragment);
transaction.hide(loginFragment);
transaction.show(mycenterFragment);
transaction.addToBackStack(null);
transaction.commit();

代码风格不好,如果大神能指点下,不胜感激!!

  • 写回答

2条回答 默认 最新

  • 买房还贷 2016-06-08 09:04
    关注

    以我的理解就是fragement互相切换喽,代码大概看了下没什么问题,fragement互相切换在fragement里面声明一个方法OnAttch这个方法 然后在Actvity里面实现一下,其实很简单的,百度一下这个方法

    评论

报告相同问题?

悬赏问题

  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果