Java 片段中的反压运行主活动中的函数

Java 片段中的反压运行主活动中的函数,java,android,android-fragments,Java,Android,Android Fragments,我有一个调用片段的活动,如下所示: 主要活动中的导航抽屉: @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); android.app.FragmentManage

我有一个调用片段的活动,如下所示:

主要活动中的导航抽屉:

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    android.app.FragmentManager fragmentManager = getFragmentManager();

    if(id == R.id.nav_jobs_layout){
        fragmentManager.beginTransaction()
                .replace(R.id.content_frame, new JobsFragment())
                .addToBackStack("Jobs")
                .commit();
    }else if(id == R.id.nav_shipments_out){
        fragmentManager.beginTransaction()
                .replace(R.id.content_frame, new ShipmentsOutFragment())
                .addToBackStack("ShipmentsOut")
                .commit();
    }else if(id == R.id.logout){
        SharedPreferences preferences = getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);
        Authentication auth = new Authentication(preferences);
        auth.logout();

        Intent intent = new Intent(MainActivity.this, LoginActivity.class);
        startActivity(intent);
    }
}
当我点击发货时,它会打开我的发货片段,在那里我有一个发货列表供用户选择。根据选择,我打开另一个片段,它将显示在那里。这是在这里完成的:

ShipmentFragment:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        Shipment shipment = shipments.get(position);

        android.app.FragmentManager fragmentManager = getFragmentManager();

        ShipmentsOutDetailsFragment newFragment = new ShipmentsOutDetailsFragment();

        newFragment.shipment = shipment;

        fragmentManager.beginTransaction()
                .replace(R.id.content_frame, newFragment)
                .addToBackStack("Shipments")
                .commit();
    }
});

您可以声明两个feild:

 final static int JOBS_FRAGMENT = 0;
 final static int SHIPMENTS_OUT_FRAGMENT = 1;
和另一个
变量
,您可以在其中保存当前
片段
,如图所示:

 public int currentFragmentShown = JOBS_FRAGMENT; // Or add the fragment shown by default on the start of the activity
然后,每次更改
片段时,更改
currentFragmentShwon
的值:

    if(id == R.id.nav_jobs_layout){
        fragmentManager.beginTransaction()
                .replace(R.id.content_frame, new JobsFragment())
                .addToBackStack("Jobs")
                .commit();
        currentFragmentShown = JOBS_FRAGMENT;
    }else if(id == R.id.nav_shipments_out){
        fragmentManager.beginTransaction()
                .replace(R.id.content_frame, new ShipmentsOutFragment())
                .addToBackStack("ShipmentsOut")
                .commit();
        currentFragmentShown = SHIPMENTS_OUT_FRAGMENT;
    }
然后在ide
onBackPressed()
函数中,您可以执行以下操作:

@Override
public void onBackPressed() {

 if (currentFragmentShown == JOBS_FRAGMENT) {
        //Do whatever you want to do when jobs fragment is shown
    } else {
        //Do whatever you want to do when shippement out fragment fragment is shown
    }
}

这可能不是最好的解决方案,但我希望这能有所帮助

您可以声明两个feild:

 final static int JOBS_FRAGMENT = 0;
 final static int SHIPMENTS_OUT_FRAGMENT = 1;
和另一个
变量
,您可以在其中保存当前
片段
,如图所示:

 public int currentFragmentShown = JOBS_FRAGMENT; // Or add the fragment shown by default on the start of the activity
然后,每次更改
片段时,更改
currentFragmentShwon
的值:

    if(id == R.id.nav_jobs_layout){
        fragmentManager.beginTransaction()
                .replace(R.id.content_frame, new JobsFragment())
                .addToBackStack("Jobs")
                .commit();
        currentFragmentShown = JOBS_FRAGMENT;
    }else if(id == R.id.nav_shipments_out){
        fragmentManager.beginTransaction()
                .replace(R.id.content_frame, new ShipmentsOutFragment())
                .addToBackStack("ShipmentsOut")
                .commit();
        currentFragmentShown = SHIPMENTS_OUT_FRAGMENT;
    }
然后在ide
onBackPressed()
函数中,您可以执行以下操作:

@Override
public void onBackPressed() {

 if (currentFragmentShown == JOBS_FRAGMENT) {
        //Do whatever you want to do when jobs fragment is shown
    } else {
        //Do whatever you want to do when shippement out fragment fragment is shown
    }
}
这可能不是最好的解决方案,但我希望这能有所帮助,请尝试以下方法

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            int count = getFragmentManager().getBackStackEntryCount();
            if (count == 0) {
                super.onBackPressed(); //this method just will be called when there is none more fragments
            } else getFragmentManager().popBackStack();
        }
    }
尝试如下

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            int count = getFragmentManager().getBackStackEntryCount();
            if (count == 0) {
                super.onBackPressed(); //this method just will be called when there is none more fragments
            } else getFragmentManager().popBackStack();
        }
    }

艾布纳先生,你是天才艾布纳先生,你是天才看起来它会做这件事,但是艾布纳邮报用一种简单得多的方式做这件事看起来它会做这件事,但是艾布纳邮报用一种简单得多的方式做这件事