آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

طبقه بندی موضوعی

safeArgs در navigation component

چهارشنبه, ۱۳ اسفند ۱۳۹۹، ۰۱:۴۰ ب.ظ

برای انتقال اطلاعات بین فرگمنت ها در navigation component دو روش وجود دارد:

 

1. استفاده از bundle - در این صورت bundle رو به عنوان آرگومان دوم navigate پاس می دهیم اما این روش توصیه نمی شود.

2. استفاده از safeArgs که این روش پیشنهاد میشه.

در این روش ابتدا می بایست تنظیمات زیر انجام شود:

- در فایل (build.gradle(project در قسمت dependencies کد زیر اضافه شود:

classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"

- در قسمت (build.gradle(module بالای صفحه پلاگین زیر اضافه گردد:

apply plugin: "androidx.navigation.safeargs"

***

نکته مهم: در ریسورس نویگیشن آرگومان ها را در مقصد تعریف کرده و حتما مقدار default value برای آن ست می کنیم تا اگر مقداری به آنها ارسال نشد کرش نکنه.

<fragment
    android:id="@+id/secondFragment"
    android:name="com.mimdal.na.SecondFragment"
    android:label="fragment_second"
    tools:layout="@layout/fragment_second">
    <action
        android:id="@+id/action_secondFragment_to_splashFragment"
        app:destination="@id/splashFragment" />
    <argument
        android:name="password"
        android:defaultValue=""
        app:argType="string" />
    <argument
        android:name="name"
        android:defaultValue=""
        app:argType="string" />
</fragment>

 

کد ارسال دیتا از فرگمنت مبدا:

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String name = edt_txt_name.getText().toString();
        String password = edt_txt_password.getText().toString();
        
        FirstFragmentDirections.ActionFirstFragmentToSecondFragment2 action =
                FirstFragmentDirections.actionFirstFragmentToSecondFragment2();

        action.setName(name);
        action.setPassword(password);

        NavController navController = Navigation.findNavController(view);
        navController.navigate(action);

    }
});

 

کد دریافت اطلاعات از فرگمنت:

txt_show.setText("name is: " +
SecondFragmentArgs.fromBundle(getArguments()).getName() + "\n" +
        "password is: " +
        SecondFragmentArgs.fromBundle(getArguments()).getPassword());

 

موافقین ۰ مخالفین ۰ ۹۹/۱۲/۱۳
میم دال

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی