Android 如何在反压时处理多个片段

Android 如何在反压时处理多个片段,android,fragment,Android,Fragment,主要活动具有底部导航,其中包含5个片段。每个片段内部都有多个片段。如何处理它的反压 Homepage.java public class Homepage extends AppCompatActivity { private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationI

主要活动具有底部导航,其中包含5个片段。每个片段内部都有多个片段。如何处理它的反压

Homepage.java

public class Homepage extends AppCompatActivity {
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Fragment selectedFragment = null;
        switch (item.getItemId()) {
            case R.id.home:
                selectedFragment = Fragment_home.newInstance();
                break;
            case R.id.eventsfeed:
                selectedFragment = Fragment_eventsfeed.newInstance();
                break;
            case R.id.events:
                selectedFragment = Fragment_events.newInstance();
                break;
            case R.id.messages:
                selectedFragment = Fragment_messages.newInstance();
                break;
            case R.id.settings:
                selectedFragment = Fragment_settings.newInstance();
                break;
        }
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.content, selectedFragment);
        transaction.commit();
        return true;

    }

};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.homepage);

    Fragment fragmentnewview = new Fragment_home();
    FragmentManager frMan = getSupportFragmentManager();
    FragmentTransaction frTr = frMan.beginTransaction();
    frTr.add(R.id.content,fragmentnewview);
    frTr.commit();

    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
    BottomNavigationViewHelper.disableShiftMode(navigation);

}}
Fragment_home.java

public class Fragment_home extends Fragment {

public static Fragment_home newInstance(){
        Fragment_home fragment=new Fragment_home();
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View view=inflater.inflate(R.layout.fragment_home, container, false);
    CardView card=(CardView)view.findViewById(R.id.next_page_home_card);

    card.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            view.setVisibility(View.GONE);
            Fragment fragmentnewview = new Event_details();
            FragmentManager frMan = getActivity().getSupportFragmentManager();
            FragmentTransaction frTr = frMan.beginTransaction();
            frTr.add(R.id.content,fragmentnewview);
            frTr.commit();
        }
    });


    return view;
}
}

在Fragment_home.java中,当它单击时,我有一个卡片视图,它转到下一个Fragment Event_Details.java

public class Event_details extends Fragment {
Button add_comments;
ImageButton back;
public static Event_details newInstance(){
    Event_details fragment=new Event_details();
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View view=inflater.inflate(R.layout.event_details, container, false);
    add_comments=(Button)view.findViewById(R.id.add_comment);

    back=(ImageButton)view.findViewById(R.id.back);

    back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            view.setVisibility(View.GONE);
            Fragment fragmentnewview = new Fragment_home();
            FragmentManager frMan = getActivity().getSupportFragmentManager();
            FragmentTransaction frTr = frMan.beginTransaction();
            frTr.add(R.id.content,fragmentnewview);
            frTr.commit();
        }
    });
    add_comments.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            view.setVisibility(View.GONE);
            Fragment fragmentnewview = new Comments();
            FragmentManager frMan = getActivity().getSupportFragmentManager();
            FragmentTransaction frTr = frMan.beginTransaction();
            frTr.add(R.id.content,fragmentnewview);
            frTr.commit();
        }
    });


    return view;
}
Event_Details.java

public class Event_details extends Fragment {
Button add_comments;
ImageButton back;
public static Event_details newInstance(){
    Event_details fragment=new Event_details();
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View view=inflater.inflate(R.layout.event_details, container, false);
    add_comments=(Button)view.findViewById(R.id.add_comment);

    back=(ImageButton)view.findViewById(R.id.back);

    back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            view.setVisibility(View.GONE);
            Fragment fragmentnewview = new Fragment_home();
            FragmentManager frMan = getActivity().getSupportFragmentManager();
            FragmentTransaction frTr = frMan.beginTransaction();
            frTr.add(R.id.content,fragmentnewview);
            frTr.commit();
        }
    });
    add_comments.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            view.setVisibility(View.GONE);
            Fragment fragmentnewview = new Comments();
            FragmentManager frMan = getActivity().getSupportFragmentManager();
            FragmentTransaction frTr = frMan.beginTransaction();
            frTr.add(R.id.content,fragmentnewview);
            frTr.commit();
        }
    });


    return view;
}
}

单击Event_Details.java时,我在Event_Details.java中有一个按钮,它调用另一个片段Comments.java

public class Comments extends Fragment {
ImageButton back;
public static Comments newInstance(){
    Comments fragment=new Comments();
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View view=inflater.inflate(R.layout.add_your_comments, container, false);
    back=(ImageButton)view.findViewById(R.id.back);

    back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            view.setVisibility(View.GONE);
            Fragment fragmentnewview = new Event_details();
            FragmentManager frMan = getActivity().getSupportFragmentManager();
            FragmentTransaction frTr = frMan.beginTransaction();
            frTr.add(R.id.content,fragmentnewview);
            frTr.commit();
        }
    });


    return view;
}
Comments.java

public class Comments extends Fragment {
ImageButton back;
public static Comments newInstance(){
    Comments fragment=new Comments();
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View view=inflater.inflate(R.layout.add_your_comments, container, false);
    back=(ImageButton)view.findViewById(R.id.back);

    back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            view.setVisibility(View.GONE);
            Fragment fragmentnewview = new Event_details();
            FragmentManager frMan = getActivity().getSupportFragmentManager();
            FragmentTransaction frTr = frMan.beginTransaction();
            frTr.add(R.id.content,fragmentnewview);
            frTr.commit();
        }
    });


    return view;
}
}


back.setOnClickListener是返回的图像按钮,但我无法在硬件返回按钮中实现。

加载片段时,请在FragmentTransaction上使用addToBackStacknull。如果您这样做,后退按钮将反转事务。

您需要@Override your activity on backpressed method!!! 关于你的问题有很多好的信息和答案!如果你想成为一名优秀的程序员,你需要良好的研究技能!!!: 试着自己研究并解决这个问题。编写一些代码,如果您仍然无法解决问题,那么在编写完所有代码之后,我将为您提供复制和粘贴代码:

@Override onBackPressed @L.Petrosyan告诉我们的方法, Inside On Back按使用viewpager.getCurrentItem设置viewpager的当前位置;
它会给你一个无价值的回报。使用该值管理您的代码。

尝试将您的代码、您测试的内容、您所做的工作。。。我们不是魔术师知道你在做什么来解决这个问题我更新了代码。。谢谢你。。但是我也实现了addtobackstank和popbackstack..我解决了问题,我将frTr.add更改为frTr.replace,并在代码中实现了backstack。。问题解决