我有一个perl -i -pe's/^(?= \*= require_tree \.$)/ *= require iziToast\n/' file
,其中包含3个选项。单击每个选项都会使用BottomNavigationView
启动活动。然后根据每个活动中的操作,我将在其上附加/替换片段。
现在我面临的问题是,每次单击startActivity
选项时,都会创建一个新活动,并且以前打开的活动也会丢失,附加的片段状态也会丢失。
我想要实现的是每当单击一个选项时,我只想切换到该活动(如果已创建并保持其状态)。
XML
BottomNavigationView
启动活动的代码段
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="gpacalculator.code.monks.gpacalculator2.BaseActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:theme="@style/ToolbarStyle"
/>
<include
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark"
android:id="@+id/result_display_include"
layout="@layout/display_result_include"
/>
</android.support.design.widget.AppBarLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/saveFAB"
android:src="@drawable/ic_save_black_24dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:fabSize="normal"
app:layout_anchor="@id/result_display_include"
app:layout_anchorGravity="bottom|right|end"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/savedFAB"
android:src="@drawable/ic_done_black_24dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:fabSize="normal"
app:layout_anchor="@id/result_display_include"
app:layout_anchorGravity="bottom|right|end"
app:backgroundTint="#00cc99"
/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/frameLayout"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="?android:attr/windowBackground"
app:menu="@menu/navigation" />
</android.support.design.widget.CoordinatorLayout>
到目前为止,我已经尝试过使用各种意图标志,例如FLAG_ACTIVITY_REORDER_TO_FRONT,但似乎没有任何作用。
有什么可行的解决方案可以实现吗?
所有解决方案都在讨论避免重新创建片段。我很惊讶,没有我能在哪里找到活动的解决方案。
答案 0 :(得分:0)
您是否尝试过更改清单中活动的启动模式?您可以使用singleTop,它将检测活动是否已经存在,如果是这种情况,则将意图发送给该实例,而不是重新创建新实例。
<activity
android:name="your_activity_name"
android:launchMode="singleTop"
// rest of your activity declaration
/>
您还可以选择其他选项,例如SingleInstance和singleTask,以确保创建活动的一个和一个实例,尽管在大多数情况下不建议使用这些实例。
您可以在此处了解有关启动模式的更多信息:documentation
答案 1 :(得分:0)
您有很多选择来保存活动或片段状态,对我来说,我发现创建包含此类静态变量的内存类的最佳方法是
max_value = 5
def main():
global max_value
#This line requests from you to put an input with 5 digits
num1 = raw_input("Please enter a number with 5 digits\n")
bol = check_everything(num1)
if bol is False:
while (len(num1) != max_value) or (num1.isdigit() == False):
num1 = raw_input("Please enter a number with 5 digits and with
digits only\n")
num1 = int(num1)
printer(num1)
def check_everything(num1):
if (len(num1) == max_value) and (num1.isdigit() == True):
return True
else:
return False
def printer(num1):
summ = 0
s1 = ''
for x in xrange(max_value):
s1 += str(num1)[x] + ','
print s1[:-1:]
while num1 != 0:
summ += num1 % 10
num1 /= 10
print(str(summ))
if __name__ == '__main__':
main()
,在Activity中,使用onPause()保存状态,使用onResume()检索状态,如下所示:
class MemoryClass {
static String value1="";
}
答案 2 :(得分:0)
您将通过调用finish()
内部的函数NavigationItemSelectedListener
从堆栈中删除活动。删除此行并将其与标志FLAG_ACTIVITY_REORDER_TO_FRONT
结合使用,它应该可以正常工作。
答案 3 :(得分:0)
</tr>