簡體   English   中英

在主機Activity中將兩個片段添加到后台

[英]Adding two fragments to the backstack within host Activity

我目前有一個名為MainActivity的Android Activity ,該Activity通過以下代碼托管2個Fragments (片段A和片段B)。 我正在使用TabLayoutMainActivity Fragment A和Fragment B之間來回導航。 每個Fragment除了onItemClick方法外還包括一個listView Fragment A和Fragment B中單擊listView的項目后,用戶將被帶到一個新的Activity (分別為活動1和活動2。我需要覆蓋Activity 2中的后退button ,以便將我帶回到Fragment B在MainActivity ,我很難理解在哪里以及如何將Fragment A和Fragment B都添加到backstack ,因此讓我在Activity_1和Activity_2中單擊“后退” button可以將我帶回到從中導航的Fragment 。以及如何在MainActivity實現片段A和片段B的backstack代碼。

片段

MainActivity.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];
    }
  }
}

FragmentA.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);

    . . .

   }
}

FragmentB.java

FragmentA.java

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

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

    . . .

   }
}

您可以使用startActivityForResult()啟動新活動,並根據正在進行的活動返回一個常量,並在MainActivity中處理響應並顯示所需的片段。

只要您的MainActivity知道(或可以知道)哪個片段(A或B)處理過,請單擊:

  1. MainActivity應該存儲狀態(有關片段處理點擊的信息)
  2. 還原后,MainActivity應該根據保存的狀態重新創建UI
  3. Activity1和Activity2都不應該知道有關Invocator的任何信息-它們可以通過“啟動”或sys返回來完成,沒關系

如果您使用FragmentStatePagerAdapter(或類似的產品)來服務您的標簽,則更加簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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