如何将mainactivity作为主片段?

时间:2017-10-15 12:47:42

标签: java android android-fragments

我有Fragments和其他WebView,当用户在NavigationViewer点击它们时会打开Fragment。我将Home Fragment添加到导航视图,但我不知道如何将其设置为默认值,以便在用户打开应用时,默认主页MainActivity会打开。我是否必须创建另一个Java类或使用MainActivity。 Java作为家庭?如果是,我如何使用Fragment。 Java作为主页Fragment?如果用户点击其他WebView打开Fragment并按下后退按钮,如何让它返回默认主页avmlabs.in/avm_db/check_login.php?x={"email":"user@gmail.com"}?目前,如果我按下后退按钮,它会摧毁App并返回手机背景。

3 个答案:

答案 0 :(得分:0)

如果你有一个Launcher-Activity,它有一个片段提供者来设置内容,你可能想以某种方式存储默认片段。

通常您开始活动并使用FragmentManager用片段替换部分内容。

如果您希望根据逻辑改变行为,您希望使用SharedPreferences或任何其他存储技术(如SQLite)将起始片段与ID或类似物一起存储。

答案 1 :(得分:0)

我假设您使用类似于此的onNavigationItemSelectedFragmentManager中的片段之间进行更改:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, new HomeFragment);
ft.commit();

如果您想在活动开始时打开片段,您所拥有的内容与onNavigationItemSelected中的内容完全相同,您必须在FragmentManager上调用onCreate,并且在NavigationView选中项目:

navigationView.setCheckedItem(R.id.home_fragment);

对于后退按钮,您应该覆盖onBackPressed功能。如果您使用Android Studio中的导航抽屉模板,则应为:

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

你可以简单地在else部分添加你的逻辑,你可以通过保持对FragmentManager的引用/查看FragmentManager(或查看导航抽屉的选定项目)来跟踪活动片段,并使其表现相应:

Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.content_frame)
if(currentFragment instanceof HomeFragment)
    super.onBackPressed();
else {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.content_frame, new HomeFragment);
    ft.commit();
}

答案 2 :(得分:0)

首先在MainActivity Layout中设置某种“容器”,其中包含Fragment

    <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/indications_LL"
            >
</FrameLayout>

然后设置FragmentManagerFragmentTransaction

private FragmentManager fragmentManager = getFragmentManager();
private FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

如果您想从Fragment方法中的主onCreate()开始 添加以下代码:

fragmentTransaction.add(R.id.container, new MainFragment(), *"set Tag for your fragment"*);

不要忘记将片段添加到BackStack:

ragmentTransaction.addToBackStack(*"Your Fragment Tag"*)

请查看下面的示例代码:

/**
 * A fragment transaction Method
 *
 * @param fragment the fragment we want to display
 */
private void setFragmentTransaction(Fragment fragment, MainMenus tagName) {


    fragmentManager = getFragmentManager();
    fragmentTransaction = fragmentManager.beginTransaction(); 

    //replacing fragments new Fragments
    if (fragment != null) {
        fragmentTransaction.replace(R.id.container, fragment, tagName.toString());
    } else if (fragment == null && (fragmentManager.getBackStackEntryCount() == 0)) { // starting with main Fragment
        fragmentTransaction.add(R.id.container, new MainFragment(), MainMenus.MAIN_MENUS.toString());
    }
    if (tagName == null) {
        fragmentTransaction.addToBackStack(null);
    } else {
        fragmentTransaction.addToBackStack(tagName.toString());
    }
    fragmentTransaction.commitAllowingStateLoss();
    fragmentManager.executePendingTransactions();
}

对于backbutton,您必须@Override onBackPressed()方法。然后,您可以使用Fragment's TAG处理backPress,或者当popBackStack()达到特定片段的计数时,您可以 @Override public void onBackPressed() { //The first method, using TAG if (fragmentManager.findFragmentByTag( * "Your Fragment TAG" *.toString()) !=null){ fragmentManager.popBackStack() } //The second method: if more than two fragment, delete fragment stack if (fragmentManager.getBackStackEntryCount() > 3) { fragmentManager.popBackStack(); } super.onBackPressed(); } : 看一下下面的例子:

<div id="gatewayDimmer">&nbsp;</div>
<div id="gatewaydiv">
<ul id="OfferList">
    <h1>Ayudanos a mantener la P&aacute;gina</h1>
    <span id="gatewayMessage">Hicimos esta p&aacute;gina de onda. Y no se mantiene sola! Ayudanos clickeando en la publicidad.</span>   <br />
    <br />
    <li><a href="http://www.wachahost.com" class="offerlink" target="blank">Cheap Web Hosting</a></li>
    <li><a href="http://peerfly.com/x/0/1076/3696/" class="offerlink" target="blank">Free Apple Ipad</a></li>
    <li><a href="http://www.google.com" class="offerlink" target="blank">Google</a></li>
</ul>
<br />
<br />
Luego de completar la oferta espera: <span id="count">10</span> segundos               <script type="text/javascript">

            {

            (function countDown(){
              var counter = 10;

              setInterval(function countDown() {
                counter--;
                if (counter >= 0) {
                  span = document.getElementById("count");
                  span.innerHTML = counter;
                }
                // Display 'counter' wherever you want to display it.
                if (counter === 0) {
                //    alert('this is where it happens');
                    clearInterval(counter);
                }

              }, 1000);

            })();

            }

            </script>            para acceder a la p&aacute;gina.<br />
Gracias!</div>