這個問題百度了很多能用的很少!
原來看的B站的視頻教程比較老了參數不匹配!我記一下安卓studio3.1的方法
切換fragment 前都先要 FragmentManager manager=getSupportFragmentManager() //這個是 android.support.v4.app.FragmentManager;
然后FragmentTransaction transaction=manager.beginTransaction(); 之后執行 transaction.replace(fragment 的id); 最后 transaction.commit();
感覺一般主窗口載入窗口你會Add一個fragment 之后點擊切換的時候 程序就會崩潰!!!! 你要在載入你fragment 前面加入 transaction=manager.beginTransaction();不管你載入那個fragment 都加這一句
代碼如下寫的很low 湊合看
主窗口代碼
package com.stdu.myllogin; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView zhanghaodenglu; private TextView dongtaimimadenglu; private FragmentManager manager; private FragmentTransaction transaction; private YanZhengMaFragment yanZhengMaFragment; private LoginFragment loginFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); loginFragment=new LoginFragment(); manager= getSupportFragmentManager(); transaction=manager.beginTransaction(); transaction.replace(R.id.login_frea,loginFragment); transaction.commit(); zhanghaodenglu=findViewById(R.id.zhanghao_login); dongtaimimadenglu=findViewById(R.id.mima_login); zhanghaodenglu.setOnClickListener(listener); dongtaimimadenglu.setOnClickListener(listener); yanZhengMaFragment=new YanZhengMaFragment(); loginFragment=new LoginFragment(); } private View.OnClickListener listener=new View.OnClickListener() { @Override public void onClick(View view) { switch (view.getId()) { case R.id.mima_login: hideFragment(transaction); //transaction.remove(loginFragment); transaction=manager.beginTransaction();//這里一定要再寫一遍 否則會出錯 transaction.replace(R.id.login_frea,yanZhengMaFragment); transaction.commit(); // Toast.makeText(MainActivity.this,"驗證碼登陸測試",Toast.LENGTH_SHORT).show(); break; case R.id.zhanghao_login: hideFragment(transaction); transaction=manager.beginTransaction();//這里一定要再寫一遍 否則會出錯 transaction.replace(R.id.login_frea,loginFragment); transaction.commit(); //Toast.makeText(MainActivity.this,"賬號登陸測試",Toast.LENGTH_SHORT).show(); break; } } }; private void hideFragment(FragmentTransaction transaction) { if (loginFragment != null) { transaction.remove(loginFragment); } if (yanZhengMaFragment != null) { transaction.remove(yanZhengMaFragment); } } }
布局界面不寫了看看我的哈皮運行截圖吧