【问题标题】:Want to move from navigation drawer activity to another screen using fragments to show drawer across all screens想要使用片段从导航抽屉活动移动到另一个屏幕以在所有屏幕上显示抽屉
【发布时间】:2018-01-03 07:17:15
【问题描述】:

过去两天我一直在尝试在抽屉活动旁边添加片段,以使导航抽屉在整个应用程序中可见。我从stackoverflow和许多其他方法中尝试了几种方法,但仍然没有成功。之后我必须从第一个片段移动到第二个片段,依此类推,直到需要导航抽屉。 当我从我的活动移动到任何片段时,我想替换除抽屉之外的整个视图。每个片段都有自己的 layout.xml,就像一个活动(线性/相对布局作为其中的父级)。

抽屉活动性:

 public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    Button btnfragOne = (Button) findViewById(R.id.btnfrag_one);
    btnfragOne.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            FragOne fragment = new FragOne();
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.frag2, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit();

        }
    });

}

第一个片段类:

public class FragOne extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    return inflater.inflate(R.layout.frag_one, container, false);
}

// 第二个片段类:

public class FragTwo extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    return inflater.inflate(R.layout.frag_two, container, false);
}

【问题讨论】:

    标签: android android-fragments navigation navigation-drawer android-fragmentactivity


    【解决方案1】:

    对于这项任务,您必须在 Activity 中覆盖 onNavigationItemSelected 方法,该方法返回 NavigationDrawer 上选定片段的 id。

    试试这个,

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
    
        //calling the method displayselectedscreen and passing the id of selected menu
    
        displaySelectedFragment(item.getItemId());
    
        return true;
    }
    

    现在displaySelectedFragment,

    private void displaySelectedScreen(int itemId) {
    
        //creating fragment object
        Fragment fragment = null;
    
        //initializing the fragment object which is selected
        switch (itemId) {
    
            case R.id.your_fragment_one_id:
                fragment = new FragOne();
                break;
    
            case R.id.your_fragment_two_id:
                fragment = new FragTwo();
                break;
        }
    
        //replacing the fragment
        if (fragment != null) {
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.main_layout_id_which_is_to_be_replace, fragment);
            ft.commit();
        }
    
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.your_drawer_layout_id);
        drawer.closeDrawer(GravityCompat.START);
    }
    

    编辑 -- 如果您想从 FragOne 导航到 FragTwo。试试这个,

    在您的Activity 中创建一个方法,

    public void showFragTwo(){
    
        FragmentManager manager = getSupportFragmentManager();
        FragTwo frag = new FragTwo();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.replace(R.id.your_layout_id_which_is_to_be_replace, frag);
        transaction.commit();
    
    }
    

    然后在你的FragOne中当你想启动FragTwo时,从Activity调用startFragTwo方法为,

    ((YourActivity)  getActivity()).showFragTwo();
    

    【讨论】:

    • 不,我不想使用抽屉/导航项单击移动,我想通过单击 main_content_view 项/按钮单击移动到下一个屏幕。使用导航项点击,我已经有了解决方案。
    • 现在检查答案@UmerFarooq
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 2020-05-30
    • 2020-09-04
    • 2020-09-12
    • 1970-01-01
    相关资源
    最近更新 更多