簡體   English   中英

如何在MainActivity啟動時直接選擇片段類?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM