我正在使应用看起来像这样。
圆形的东西是纽扣。绿色部分是片段。
我的host_navigation.xml
由A,B,C片段组成。
那些片段属于MainActivity
(当然,它具有fragment
视图),并且没有<action>
(设计中片段之间没有行),因为我想打开每个随机碎片。例如,A-> B,B-> A C-> A,...无论您身在何处,都可以移动到特定片段。
三个圆形按钮也属于MainActivity
。
我找到了BottomNavigationView
或NavigationView
个样本。但是,它们似乎无法在此布局中使用。但是行为是非常相似的。只是布局不同。
如何实现此目的,以及如何自然地管理堆栈行为?例如,返回按钮,我想保留最后3个片段,并删除堆栈中所有先前的片段。
+
这是我的host_navigation.xml
(没有动作。)
<?xml version="1.0" encoding="utf-8"?>
<navigation 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/host_navigation"
app:startDestination="@id/aFragment">
<fragment android:id="@+id/aFragment"
android:name="com.example.AFragment"
android:label="fragment_a"
tools:layout="@layout/fragment_a"/>
<fragment android:id="@+id/bFragment"
android:name="com.example.BFragment"
android:label="fragment_b"
tools:layout="@layout/fragment_b"/>
<fragment android:id="@+id/cFragment"
android:name="com.example.CFragment"
android:label="fragment_c"
tools:layout="@layout/fragment_c">
</fragment>
</navigation>
这是activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<RelativeLayout
android:id="@+id/rl_tab_area"
android:layout_width="match_parent"
android:layout_height="105dp">
<Button
android:id="@+id/btn_a"
android:layout_width="50dp"
android:layout_height="50sp"
android:layout_alignParentTop="true"
android:src="@drawable/ic_a"
android:margin="5dp"
android:background="@drawable/btn_a"
/>
<Button
android:id="@+id/btn_b"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginTop="30dp"
android:layout_marginLeft="15dp"
android:layout_toRightOf="@id/btn_a"
android:background="@drawable/btn_b"/>
<Button
android:id="@+id/btn_c"
android:layout_width="200dp"
android:layout_height="100dp"
android:layout_alignParentRight="true"
android:background="@drawable/btn_c"/>
</RelativeLayout>
<fragment
android:id="@+id/fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_below="@+id/rl_tab_area"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/host_navigation">
</fragment>
</RelativeLayout>
我想我需要在MainActivity
val navController = Navigation.findNavController(this@MainActivity, R.id.host_navigation)
如果使用NavigaitonBottomView
,则可以将此值传递给它,但由于不使用它,我现在不知道。
我试图以此称呼其他片段
Navigation.findNavController(this, R.id.fragment).navigate(R.id.aFragment)
尝试
Navigation.findNavController(this, R.id.host_navigation).navigate(R.id.aFragment)
Navigation.findNavController(R.id.host_navigation).navigate(R.id.aFragment)
findNavController(R.id.host_navigation).navigate(R.id.aFragment)
以及其他方式。但是到目前为止,它们都没有起作用。
答案 0 :(得分:0)
以这种方式为所有片段设置操作:
from selenium import webdriver
import time
driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.get('https://example.com')
page_height_pre_scroll = driver.execute_script('return document.body.scrollHeight;')
run_time, max_run_time = 0, 1
while True:
iteration_start = time.time()
# Scroll webpage, the 100 allows for a more 'aggressive' scroll
driver.execute_script('window.scrollTo(0, 100*document.body.scrollHeight);')
# Collect new height of webpage
page_height_post_scroll = driver.execute_script('return document.body.scrollHeight;')
if page_height_pre_scroll != page_height_post_scroll: # Success at scrolling
run_time = 0
page_height_pre_scroll = page_height_post_scroll
elif page_height_pre_scroll == page_height_post_scroll and run_time < max_run_time: # Loading page
run_time += time.time() - iteration_start
elif page_height_pre_scroll == page_height_post_scroll and run_time >= max_run_time: # Scrolled to the bottom, or timed out
break
或者也可以使用<navigation
...
<fragment
android:id="@+id/fragment_a"
android:label="fragment_a"
android:name="com.example.AFragment"
tools:layout="@layout/fragment_a">
<action
android:id="@+id/a_to_b"
app:destination="@id/fragment_b"
app:launchSingleTop="true"/>
<action
android:id="@+id/a_to_c"
app:destination="@id/fragment_c"
app:launchSingleTop="true"/>
</fragment>
</navigation>
然后通过navController启动它们:
app:popUpTo