在主机Activity中向后台添加两个片段

时间:2019-02-20 03:52:05

标签: java android android-fragments

我目前有一个名为Activity的Android MainActivity,它通过以下代码托管2个Fragments(片段A和片段B)。我正在使用TabLayoutFragment中的Fragment A和MainActivity B之间来回导航。除Fragment方法外,每个listView都包含一个onItemClick。在listView A和Fragment B中同时点击Fragment中的项目后,用户将被带到新的Activity(分别为Activity_1和Activity_2。我需要覆盖返回button中的Activity,这样我就回到了Fragment中的MainActivityB。我很难理解在何处以及如何添加两个{{ 1}} A和Fragment B到Fragment,这样我就可以在Activity_1和Activity_2中击退backstack,将我带回到导航的button我在哪里以及如何在Fragment中为片段A和片段B实现backstack代码。

Fragments

MainActivity.java

MainActivity

FragmentA.java

public class MainActivity extends AppCompatActivity {

TabLayout tabLayout;
ViewPager viewPager;

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

    viewPager = (ViewPager) findViewById(R.id.viewPager);
    viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager(), getApplicationContext()));

    tabLayout = (TabLayout) findViewById(R.id.tabLayout);
    tabLayout.setupWithViewPager(viewPager);

}
private class CustomAdapter extends FragmentStatePagerAdapter{

    private String fragments [] = {"Fragments 1", "Fragments 2"};

    public CustomAdapter(FragmentManager supportFragmentManager, Context applicationContext){
        super(supportFragmentManager);
    }

    @Override
    public Fragment getItem(int position) {
        switch(position){
            case 0:
                return  new Fragment1();
            case 1:
                return  new Fragment2();
            default:
                return null;
        }
    }
    @Override
    public int getCount() {
        return fragments.length;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return fragments[position];
    }
  }
}

FragmentB.java

public class FragmentA extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragA, container, false);
}

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    . . .

   }
}

2 个答案:

答案 0 :(得分:0)

您可以使用startActivityForResult()开始新的活动,并根据正在进行的活动返回一个常量,并在MainActivity中处理响应并显示所需的片段。

答案 1 :(得分:0)

只要您的MainActivity知道(或可以知道)哪个片段(A或B)处理过,请单击:

  1. MainActivity应该存储状态(有关片段处理点击的信息)
  2. 还原后,MainActivity应该根据保存的状态重新创建UI
  3. Activity1和Activity2都不应该了解有关Invocator的任何信息-它们可以通过“启动”或sys返回来完成,没关系

如果您使用FragmentStatePagerAdapter(或类似的产品)来提供标签,则更加简单。