[英]How to directly select fragment class on launch of the MainActivity?
我試圖找出如何直接顯示memberFragment.class片段而不是MainActivity ,而無需在導航欄上選擇它。
我的代碼:
public class AdminActivity extends AppCompatActivity {
private DrawerLayout mdrawerl;
private ActionBarDrawerToggle mtoggle;
private FirebaseAuth auth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin);
auth = FirebaseAuth.getInstance();
mdrawerl = (DrawerLayout) findViewById(R.id.drawer);
mtoggle = new ActionBarDrawerToggle(this,mdrawerl,R.string.open, R.string.close);
mdrawerl.addDrawerListener(mtoggle);
NavigationView nvDrawer = (NavigationView) findViewById(R.id.nv) ;
mtoggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setupDrawerContent(nvDrawer);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mtoggle.onOptionsItemSelected(item)){
return true;
}
return super.onOptionsItemSelected(item);
}
public void selectItemDrawer(MenuItem menuItem) {
auth = FirebaseAuth.getInstance();
Fragment myFragment = null;
Class fragmentClass;
switch (menuItem.getItemId()){
case R.id.signout:
auth.getInstance().signOut();
Intent i = new Intent(AdminActivity.this, LoginActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
return;
}
switch (menuItem.getItemId()){
case R.id.members:
fragmentClass = memberFragment.class;
break;
case R.id.transactions:
fragmentClass = transaction.class;
break;
default:
fragmentClass = member.class;
}
try {
myFragment = (Fragment) fragmentClass.newInstance();
}
catch (Exception e) {
e.printStackTrace();
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flcontent,myFragment).commit();
menuItem.setChecked(true);
setTitle(menuItem.getTitle());
mdrawerl.closeDrawers();
}
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
selectItemDrawer(item);
return false;
}
});
}
這里的問題是,啟動活動時,它將在活動本身上啟動,而不是默認使用片段memberFragment 。
嘗試下面的代碼,將下面的代碼放在onCreate()
:
memberFragment frag = new memberFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.flcontent, frag)
.commit();
完整的代碼應如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin);
auth = FirebaseAuth.getInstance();
mdrawerl = (DrawerLayout) findViewById(R.id.drawer);
mtoggle = new ActionBarDrawerToggle(this,mdrawerl,R.string.open, R.string.close);
mdrawerl.addDrawerListener(mtoggle);
NavigationView nvDrawer = (NavigationView) findViewById(R.id.nv) ;
mtoggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setupDrawerContent(nvDrawer);
memberFragment frag = new memberFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.flcontent, frag)
.commit();
}
您不能在沒有活動的情況下啟動片段,但可以在活動啟動后突然啟動片段。
為此,對活動onCreate進行簡單的片段事務, 最重要的部分是從NavigationView中選擇菜單項 。
復制以下代碼:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin);
auth = FirebaseAuth.getInstance();
mdrawerl = (DrawerLayout) findViewById(R.id.drawer);
mtoggle = new ActionBarDrawerToggle(this,mdrawerl,R.string.open,
R.string.close);
mdrawerl.addDrawerListener(mtoggle);
NavigationView nvDrawer = (NavigationView) findViewById(R.id.nv) ;
mtoggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setupDrawerContent(nvDrawer);
memberFragment frag = new memberFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.flcontent, frag)
.commit();
nvDrawer.getMenu().getItem(0).setChecked(true);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.