鍍金池/ 問答/Android/ 請教一個Fragment和RadioButton不對應(yīng)的問題

請教一個Fragment和RadioButton不對應(yīng)的問題

這是一個主界面,頂部是Fragment,底部四個RadioButton.當(dāng)我打開主界面然后選中最后一個"我的"模塊,然后直接按home鍵返回手機桌面.但是過幾分鐘點擊打開APP會錯亂:RadioButton選中的是"我的",但是Fragment選中的確是第一個,應(yīng)該是內(nèi)存回收導(dǎo)致的,請問這樣的問題該怎么解決呢?
截圖和代碼:
圖片描述


/**
 * 主界面
 */
public class MainActivity extends BaseActivity implements View.OnClickListener {
    
    @BindView(R.id.rb_home)
    RadioButton mHome;
    @BindView(R.id.rb_channel)
    RadioButton mChannel;
    @BindView(R.id.rb_discovery)
    RadioButton mDiscovery;
    @BindView(R.id.rb_mine)
    RadioButton mMine;
    @BindView(R.id.rg_tabs)
    RadioGroup mTabs;
    @BindView(R.id.iv_switch_game_normal)
    ImageView mSwitchGameNormal;
    @BindView(R.id.iv_close)
    ImageView mClose;

    private int currentButton = -1;
    private static final int REQUEST_EXTERNAL_STORAGE = 3;
    FragmentManager manager;
    FragmentTransaction transaction;
    private PopupWindow mPopupWindow;

    private static String[] PERMISSIONS_STORAGE = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
    private String mLocalVersion;
    private String mToken;
    private String logoutFailMsg;
    private RotateAnimation mRotateAnimation;
    private HomeFragment homeFragment;
    private ChannelFragment channelFragment;
    private DiscoveryFragment discoveryFragment;
    private MineFragment mineFragment;

    @Override
    protected View initView() {
        View view = View.inflate(this, R.layout.activity_main, null);
        ButterKnife.bind(this, view);
        mIvMore.setImageResource(R.mipmap.search);
        mTabs.check(R.id.rb_home);//默認(rèn)選中首頁
        mIvBack.setVisibility(View.GONE);
        frameLayout.addView(view);
        return view;
    }

    @Override
    protected void initData() {
//        NetWorkStatusUtils.checkNetWork(this);//當(dāng)前網(wǎng)絡(luò)狀態(tài)檢查
        int localVersionCode = PackageUtils.getVersionCode(this);
        mLocalVersion = String.valueOf(localVersionCode);//本地版本號
        Log.d(TAG, "initData: 1055=" + mLocalVersion);

        //獲取token
        mToken = PreferenceUtils.getString(this, "token");
        showHomePage(); //打開界面即顯示首頁內(nèi)容
        startService(new Intent(this, NetworkWatchService.class));
    }

    @Override
    protected void initEvent() {
        mHome.setOnClickListener(this);
        mChannel.setOnClickListener(this);
        mDiscovery.setOnClickListener(this);
        mMine.setOnClickListener(this);
        mIvMore.setOnClickListener(this);
        mTvTitle.setOnClickListener(this);
        mSwitchGameNormal.setOnClickListener(this);
    }


    /**
     * 打開界面即顯示首頁內(nèi)容
     */
    private void showHomePage() {
        mTabs.check(R.id.rb_home);

        //TODO:代碼待優(yōu)化
        int homeButton = 0;//避免選中模塊后重復(fù)點擊
        if (currentButton == homeButton) {
            return;
        }
        mTvTitle.setText("首頁");
        mIvMore.setVisibility(View.VISIBLE);
        mIvMore.setImageResource(R.mipmap.search);
        mMainTitle.setVisibility(View.VISIBLE);
        manager = getFragmentManager();
        transaction = manager.beginTransaction();
        mTvTitle.setTextColor(ActivityCompat.getColor(this, R.color.cl_default));
        mToolbar.setBackgroundColor(ActivityCompat.getColor(this, R.color.colorWhite));
        homeFragment = (HomeFragment) getFragmentManager().findFragmentByTag("tab1");
        channelFragment = (ChannelFragment) getFragmentManager().findFragmentByTag("tab2");
        discoveryFragment = (DiscoveryFragment) getFragmentManager().findFragmentByTag("tab3");
        mineFragment = (MineFragment) getFragmentManager().findFragmentByTag("tab4");
        if (homeFragment == null) {
            homeFragment = new HomeFragment();
            transaction.add(R.id.fl_container, homeFragment, "tab1");
        }
        if (channelFragment != null)
            transaction.hide(channelFragment);
        if (discoveryFragment != null)
            transaction.hide(discoveryFragment);
        if (mineFragment != null)
            transaction.hide(mineFragment);
        transaction.commit();
        transaction.show(homeFragment);
        currentButton = 0;
    }

    /**
     * 頻道
     */
    private void showChannelPage() {
        mTabs.check(R.id.rb_channel);
        int channelButton = 1;//避免選中模塊后重復(fù)點擊
        if (currentButton == channelButton) {
            return;
        }
        mTvTitle.setText("頻道");
        mIvTitle.setVisibility(View.GONE);
        mIvMore.setVisibility(View.GONE);
        mIvMore.setImageResource(R.mipmap.search);
        mMainTitle.setVisibility(View.VISIBLE);
        mTvTitle.setTextColor(ActivityCompat.getColor(this, R.color.cl_default));
        mToolbar.setBackgroundColor(ActivityCompat.getColor(this, R.color.colorWhite));
        manager = getFragmentManager();
        transaction = manager.beginTransaction();
        homeFragment = (HomeFragment) getFragmentManager().findFragmentByTag("tab1");
        channelFragment = (ChannelFragment) getFragmentManager().findFragmentByTag("tab2");
        discoveryFragment = (DiscoveryFragment) getFragmentManager().findFragmentByTag("tab3");
        mineFragment = (MineFragment) getFragmentManager().findFragmentByTag("tab4");
        if (channelFragment == null) {
            channelFragment = new ChannelFragment();
            transaction.add(R.id.fl_container, channelFragment, "tab2");
        }
        if (homeFragment != null) {
            transaction.hide(homeFragment);
        }
        if (discoveryFragment != null) {
            transaction.hide(discoveryFragment);
        }
        if (mineFragment != null) {
            transaction.hide(mineFragment);
        }
        transaction.show(channelFragment);
        transaction.commit();
        currentButton = 1;
    }

    /**
     * 發(fā)現(xiàn)
     */
    private void showDiscoveryPage() {
        mTabs.check(R.id.rb_discovery);
        int discoveryButton = 2;//避免選中模塊后重復(fù)點擊
        if (currentButton == discoveryButton) {
            return;
        }
        mTvTitle.setText("發(fā)現(xiàn)");
        mIvTitle.setVisibility(View.GONE);
        mIvMore.setVisibility(View.GONE);
        mMainTitle.setVisibility(View.VISIBLE);
        mTvTitle.setTextColor(ActivityCompat.getColor(this, R.color.cl_default));
        mToolbar.setBackgroundColor(ActivityCompat.getColor(this, R.color.colorWhite));
        manager = getFragmentManager();
        transaction = manager.beginTransaction();
        homeFragment = (HomeFragment) getFragmentManager().findFragmentByTag("tab1");
        channelFragment = (ChannelFragment) getFragmentManager().findFragmentByTag("tab2");
        discoveryFragment = (DiscoveryFragment) getFragmentManager().findFragmentByTag("tab3");
        mineFragment = (MineFragment) getFragmentManager().findFragmentByTag("tab4");
        if (discoveryFragment == null) {
            discoveryFragment = new DiscoveryFragment();
            transaction.add(R.id.fl_container, discoveryFragment, "tab3");
        }
        if (homeFragment != null) {
            transaction.hide(homeFragment);
        }
        if (channelFragment != null) {
            transaction.hide(channelFragment);
        }
        if (mineFragment != null) {
            transaction.hide(mineFragment);
        }
        transaction.show(discoveryFragment);
        transaction.commit();
        currentButton = 2;
    }

    /**
     * 我的
     */
    private void showMinePage() {
        mTabs.check(R.id.rb_mine);
        int mineButton = 3;//避免選中模塊后重復(fù)點擊
        if (currentButton == mineButton) {
            return;
        }
        mTvTitle.setText("我的");
        mIvMore.setImageResource(R.mipmap.setting);
        mIvMore.setVisibility(View.VISIBLE);
        mTvTitle.setTextColor(ActivityCompat.getColor(this, R.color.colorWhite));
        mToolbar.setBackgroundColor(ActivityCompat.getColor(this, R.color.orange));
        manager = getFragmentManager();
        transaction = manager.beginTransaction();
        homeFragment = (HomeFragment) getFragmentManager().findFragmentByTag("tab1");
        channelFragment = (ChannelFragment) getFragmentManager().findFragmentByTag("tab2");
        discoveryFragment = (DiscoveryFragment) getFragmentManager().findFragmentByTag("tab3");
        mineFragment = (MineFragment) getFragmentManager().findFragmentByTag("tab4");
        if (mineFragment == null) {
            mineFragment = new MineFragment();
            transaction.add(R.id.fl_container, mineFragment, "tab4");
        }
        if (homeFragment != null) {
            transaction.hide(homeFragment);
        }
        if (channelFragment != null)
            transaction.hide(channelFragment);
        if (discoveryFragment != null)
            transaction.hide(discoveryFragment);
        transaction.show(mineFragment);
        transaction.commit();
        currentButton = 3;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.rb_home:
                showHomePage();
                break;
            case R.id.rb_channel:
                showChannelPage();
                break;
            case R.id.rb_discovery:
                showDiscoveryPage();
                break;
            case R.id.rb_mine:
                showMinePage();
                break;
            case R.id.iv_more:
                if (currentButton == 0) {
                    mIvMore.setImageResource(R.mipmap.search);
                    Intent toSearch = new Intent(MainActivity.this, SearchActivity.class);
                    startActivity(toSearch);
                } else if (currentButton == 3) {
                    Intent toAccountSetting = new Intent(this, AccountSettingActivity.class);
                    startActivity(toAccountSetting);
                }
                break;
            case R.id.iv_switch_game_normal://未彈出window前點擊
                mClose.setVisibility(View.VISIBLE);
                mRotateAnimation = new RotateAnimation(0f, 90f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
                mRotateAnimation.setDuration(300);
                mClose.setAnimation(mRotateAnimation);
                break;
            default:
                break;
        }
    }
 }
回答
編輯回答
毀了心

你應(yīng)該用一個RadioGroup來管理RadioButton的選中和取消,而不用點擊事件來管理,你這樣邏輯非常亂而且擴展性很差

2017年7月4日 11:38