我有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并返回手机背景。
答案 0 :(得分:0)
如果你有一个Launcher-Activity,它有一个片段提供者来设置内容,你可能想以某种方式存储默认片段。
通常您开始活动并使用FragmentManager用片段替换部分内容。
如果您希望根据逻辑改变行为,您希望使用SharedPreferences或任何其他存储技术(如SQLite)将起始片段与ID或类似物一起存储。
答案 1 :(得分:0)
我假设您使用类似于此的onNavigationItemSelected
在FragmentManager
中的片段之间进行更改:
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>
然后设置FragmentManager
和FragmentTransaction
:
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"> </div>
<div id="gatewaydiv">
<ul id="OfferList">
<h1>Ayudanos a mantener la Página</h1>
<span id="gatewayMessage">Hicimos esta pá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ágina.<br />
Gracias!</div>