相关疑难解决方法(0)

使用AndroidX Navigation从Fragment动态ActionBar标题

我正在使用Android Jetpack 的新导航组件.

根Activity设置非常简单:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    setSupportActionBar(toolbar)

    val navController = findNavController(R.id.navigationFragment)
    setupActionBarWithNavController(navController)

    bottomNavigationView.setupWithNavController(navController)
}
Run Code Online (Sandbox Code Playgroud)

当导航图中定义了Fragment的标题时,它很有效.但对于一个片段,我想动态设置标题.

我尝试过,findNavController().currentDestination.label = "Hello world"但它没有做任何事情.

我当然可以使用类似的技巧(activity as? AppCompatActivity)?.supportActionBar?.title = "Hello world",但我觉得它会打破对我有用的魔力setupActionBarWithNavController().有没有办法动态更新动作栏标题?

android android-jetpack android-architecture-navigation

26
推荐指数
7
解决办法
1万
查看次数

如何从 SafeArgs 中的资源获取默认字符串值?

我只是在学习 Android NavigationUI,并尝试使用 Safe Args 中的字符串默认值设置工具栏标题。但是有一些问题。

“字符串资源”文件:

    <string name="title_add_item">Add new items</string>
Run Code Online (Sandbox Code Playgroud)

导航图文件。将标签设置为Title: {title}参数。

<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/nav_graph"
app:startDestination="@id/mainFragment">

<fragment
    android:id="@+id/addNewItemFragment"
    android:name="com.myapplication.AddNewItemFragment"
    android:label="Title: {title}"
    tools:layout="@layout/fragment_add_new_item" >
    <argument
        android:name="title"
        app:argType="string"
        android:defaultValue="@string/title_add_item" />
</fragment>
<fragment
    android:id="@+id/mainFragment"
    android:name="com.myapplication.MainFragment"
    android:label="fragment_main"
    tools:layout="@layout/fragment_main" >
    <action
        android:id="@+id/action_to_add_items_fragment"
        app:destination="@id/addNewItemFragment" />
</fragment>
Run Code Online (Sandbox Code Playgroud)

如果{app:argType="string"}我遇到错误:

 Caused by: org.xmlpull.v1.XmlPullParserException: unsupported value 'Add new items' for string. You must use a "reference" type to reference other resources.
Run Code Online (Sandbox Code Playgroud)

如果 {app:argType="reference"}应用程序有效,但我在标题中有一个数字(我认为这是一个资源 ID):

在此处输入图片说明

当然,我可以通过从参数中获取它来分配代码中工具栏标题的值。但是是否可以更改此代码以便正确填写标题?

string android android-navigation androidx android-safe-args

13
推荐指数
1
解决办法
1441
查看次数

如何使用导航架构组件在应用栏中设置标题

我正在尝试导航架构组件,但现在在设置标题时遇到了困难。如何以编程方式设置标题以及其工作方式?

为了澄清我的问题,让我们举个例子,在这里,我建立了一个简单的应用程序,用于MainActivity托管导航主机控制器,该应用程序MainFragment有一个按钮,然后单击该按钮转到DetailFragment

来自另一个问题的相同代码,该问题涉及堆栈溢出的多个应用栏

主要活动

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        // Setting up a back button
        NavController navController = Navigation.findNavController(this, R.id.nav_host);
        NavigationUI.setupActionBarWithNavController(this, navController);
    }

    @Override
    public boolean onSupportNavigateUp() {
        return Navigation.findNavController(this, R.id.nav_host).navigateUp();
    }
}
Run Code Online (Sandbox Code Playgroud)

主片段

public class MainFragment extends Fragment {

    public MainFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-architecture-navigation androidx

10
推荐指数
8
解决办法
9060
查看次数