我有两个片段,我想使用操作栏中的后退按钮在它们之间创建交互。理想情况下,我希望保存先前片段的状态。我只能找到有关活动的信息。
对于片段我发现了这个
private fun setupBackButton() {
if (activity is AppCompatActivity) {
(activity as AppCompatActivity?)?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
}
Run Code Online (Sandbox Code Playgroud)
但它只显示后退按钮,点击没有任何反应。
编辑
在第一个片段中,我将第二个片段称为:
val fragment = UserContentFragment()
fragment.setUser(item.user)
if (fragmentManager != null) {
fragmentManager!!
.beginTransaction()
.replace(R.id.main_layout, fragment)
.addToBackStack(null)
.commit()
}
Run Code Online (Sandbox Code Playgroud)
这是我的UserContentFragment第二个片段:
class UserContentFragment : Fragment() {
private lateinit var user: SearchUser
fun setUser(user: SearchUser) {
this.user = user
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val root = inflater.inflate(R.layout.fragment_user_content, container, false)
val userImage = root.findViewById(R.id.user_img) as ImageView
if …Run Code Online (Sandbox Code Playgroud) android android-fragments kotlin android-actionbar android-navigation
是否可以从可组合的屏幕(也在 aFloatingActionButton内部)设置 aonClick内部的值?在我的示例中,我希望能够更改 FAB 的 onClick 以根据屏幕可组合项内的值 ( ) 进行一些计算,而不将该值提升到该值所在的可组合项( )。ScaffoldNavHostScaffoldnameScaffoldMyActivity()
@Composable
fun MyActivity() {
val navController = rememberNavController()
Scaffold(
floatingActionButton = {
FloatingActionButton(onClick = { /* set this lambda from Screen1 */ }) { ... }
}
) { paddingValues ->
NavHost(
navController = navController,
startDestination = Screen.Screen1.route,
modifier = Modifier.padding(paddingValues)
) {
composable(route = Screen.Screen1.route) {
Screen1()
}
...
}
}
}
@Composable
fun Screen1() {
var name …Run Code Online (Sandbox Code Playgroud) android-navigation android-jetpack-compose jetpack-compose-navigation
我在我的Android应用程序中实现了导航抽屉.但现在我希望能够在用户单击导航栏中的任何列表项时使用片段更改布局.这是我到目前为止所得到的:
XML
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:background="#000000"
android:layout_height="match_parent" >
</FrameLayout>
<ListView android:id="@+id/left_drawer"
android:layout_width="220dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#111"/>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
Java文件
public class MainActivity extends Activity {
final String[] data ={"one","two","three"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
final DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout);
final ListView navList = (ListView) findViewById(R.id.left_drawer);
navList.setAdapter(adapter);
navList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, final int pos,long id){
drawer.setDrawerListener( new DrawerLayout.SimpleDrawerListener(){
@Override …Run Code Online (Sandbox Code Playgroud) 我开发了一个Android应用程序,我遇到了一些问题.
在我的MainActivity我有以下组件:
ArticleFragment显示文章的详细视图)Normaly,ViewPager与特定的Activity相关,但我真的想同时使用Navigation Drawer和ViewPager.唯一的方法是在同一个活动中实现这两个元素.
在DrawerLayout由导航抽屉本身和内容区域组成.在我的内容区域,我有一个FrameLayout和ViewPager.问题是ViewPager始终显示.
所以我的想法是使用android:visibility属性来交替显示/隐藏FrameLayout和ViewPager.如果你看我的activity_main.xml,你可以看到在 android:visibility设置为invisible上ViewPager.
/layout/activity_main.xml
<!-- The main content view -->
<RelativeLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/container"
android:paddingTop="?android:attr/actionBarSize"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- ViewPager -->
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible" />
</RelativeLayout>
<!-- The navigation drawer -->
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:name="NavigationDrawerFragment" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
然后:
MainActivity.java
public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks …Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager navigation-drawer android-navigation
我有一个人员列表,当用户点击一个项目时,该应用程序会显示其详细信息!我使用双窗格主/细节设计模式的平板电脑大小和小尺寸它只是用细节片段替换列表.
问题是我的经理认为用导航抽屉改变这个设计会更好!这种情况的最佳选择是什么?导航抽屉或主/细节设计?
哪个用户体验更好?
在与蓝牙相关的应用程序(带有minSdkVersion="18")中,我有一个MainActivity.java,显示以下 3 个 UI 片段之一:

要显示“向上按钮”并处理“后退按钮”,我有以下代码:
public class MainActivity extends Activity
implements BleWrapperUiCallbacks {
// set in onResume() of each fragment
private Fragment mActiveFragment = null;
´ @Override
public void onBackPressed() {
if (!getFragmentManager().popBackStackImmediate())
super.onBackPressed();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR);
setContentView(R.layout.activity_root);
getActionBar().setDisplayHomeAsUpEnabled(true);
if (savedInstanceState == null) {
Fragment fragment = new MainFragment();
getFragmentManager().beginTransaction()
.replace(R.id.root, fragment, "main")
.commit();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch …Run Code Online (Sandbox Code Playgroud) android android-fragments android-actionbar up-button android-navigation
我正在使用 Jetpack Navigation 来处理 Fragment 的导航。按照文档操作后,当我运行该应用程序时,出现以下错误。
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.navigation.fragment.NavHostFragment"
Run Code Online (Sandbox Code Playgroud)
构建.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 'android-P'
defaultConfig {
applicationId "com.meditab.imspatient"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
def nav_version = "1.0.0-alpha01"
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.constraintlayout:constraintlayout:1.1.0' // Constraint layout
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" // Kotlin
// Anko
implementation "org.jetbrains.anko:anko-commons:$anko_version" // …Run Code Online (Sandbox Code Playgroud) android kotlin android-navigation android-jetpack android-architecture-navigation
我想让大部分菜单项由导航组件的控制器处理,但我也想单独处理一个“注销”菜单项,如下所示:
val navController = findNavController(R.id.nav_host_fragment)
nav_view.setNavigationItemSelectedListener { item ->
when(item.itemId) {
R.id.logout_menu_item -> {
Toast.makeText(context, "Logut Menu Item Touched", Toast.LENGTH_LONG).show()
true
}
else -> false
}
}
nav_view.setupWithNavController(navController)
bottom_navigation.setupWithNavController(navController)
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用,以及如何解决此问题?
android navigation-drawer android-navigation android-architecture-components
我正在使用新的 AndroidX 导航框架。
我有几个片段都链接在导航链中。
片段A --> 片段B --> 片段C
FragmentC 有一个“取消”按钮,它应该让我一直回到 FragmentA。
我应该执行以下操作:
在 FragmentC 上调用该方法:
Navigation.findNavController(view).navigateUp();
Run Code Online (Sandbox Code Playgroud)
然后在 FragmentB 上侦听一些回调并使用一些传递的参数或参数触发来自 FragmentB 的另一个 navigationUp() 函数
或者是否有一些方法可以做相当于navigateUpTwice()
我正在尝试使用导航控制器。我想从LoginFragment移至HomeFragment。在LoginFragment此,我使用下面的代码移至HomeFragment。
Navigation.findNavController(view).navigate(homeDestination)
Run Code Online (Sandbox Code Playgroud)
但是,当我点击中的后退按钮时HomeFragment,它将返回到LoginFragment,我希望当我点击按钮时它将关闭该应用程序。
以旧的方式,如果我使用activity而不是using Fragment,那么我通常会执行以下操作来获得预期的行为:
val intent = Intent(this,HomeActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
通过使用这些标志,我可以用来获得预期的行为。但是我不使用导航控制器来实现相同的行为。
android kotlin android-navigation android-jetpack android-architecture-navigation
android ×9
kotlin ×3
android-architecture-navigation ×2
android-architecture-components ×1
androidx ×1
up-button ×1