国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Android】怎么使用一個(gè)ViewModel用在多個(gè)Activity或者Fragment中

這篇具有很好參考價(jià)值的文章主要介紹了【Android】怎么使用一個(gè)ViewModel用在多個(gè)Activity或者Fragment中。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

項(xiàng)目需求

在多個(gè)Activity或者Fragment中使用同一個(gè)ViewModel

需求實(shí)現(xiàn)
1.使用ActivityScope或FragmentScope

想在一個(gè)Activity或Fragment中共享ViewModel實(shí)例,可以使用ActivityScope或FragmentScope。這兩種范圍會(huì)根據(jù)它們所綁定的Activity或Fragment自動(dòng)管理ViewModel實(shí)例的生命周期。

例如,創(chuàng)建一個(gè)繼承自AndroidX庫(kù)中的ViewModel類的MyViewModel實(shí)例,并將其分配給MainActivity和MyFragment:

public class MainActivity extends AppCompatActivity {
    private MyViewModel mViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 獲取ViewModel實(shí)例
        mViewModel = new ViewModelProvider(this).get(MyViewModel.class);
    }
}

public class MyFragment extends Fragment {
    private MyViewModel mViewModel;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_my, container, false);

        // 獲取ViewModel實(shí)例
        mViewModel = new ViewModelProvider(requireActivity()).get(MyViewModel.class);

        return view;
    }
}

注意,在MainActivity中,使用this作為ViewModelProvider的構(gòu)造函數(shù)參數(shù),而在MyFragment中,使用requireActivity()作為參數(shù)。這是因?yàn)镕ragment需要使用其父Activity的范圍來訪問ViewModel實(shí)例。

2.使用ApplicationScope

如果想在整個(gè)應(yīng)用程序中共享ViewModel實(shí)例,可以使用ApplicationScope。這種范圍會(huì)在整個(gè)應(yīng)用程序中自動(dòng)管理ViewModel實(shí)例的生命周期。

例如,創(chuàng)建一個(gè)繼承自AndroidX庫(kù)中的ViewModel類的MyViewModel實(shí)例,并將其分配給整個(gè)應(yīng)用程序:

public class MyApplication extends Application {
    private MyViewModel mViewModel;

    @Override
    public void onCreate() {
        super.onCreate();

        // 獲取ViewModel實(shí)例
        mViewModel = new ViewModelProvider.AndroidViewModelFactory(this).create(MyViewModel.class);
    }

    public MyViewModel getViewModel() {
        return mViewModel;
    }
}

注意,在MyApplication中,我們使用了ViewModelProvider.AndroidViewModelFactory這個(gè)工廠來創(chuàng)建ViewModel實(shí)例。這個(gè)工廠需要一個(gè)Application對(duì)象作為構(gòu)造函數(shù)參數(shù)。

然后可以在任何Activity或Fragment中,通過MyApplication實(shí)例獲取ViewModel實(shí)例:

public class MainActivity extends AppCompatActivity {
    private MyViewModel mViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 獲取ViewModel實(shí)例
        MyApplication app = (MyApplication) getApplication();
        mViewModel = app.getViewModel();
    }
}

public class MyFragment extends Fragment {
    private MyViewModel mViewModel;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_my, container, false);

        // 獲取ViewModel實(shí)例
        MyApplication app = (MyApplication) requireActivity().getApplication();
        mViewModel = app.getViewModel();

        return view;
    }
}

注意,在MainActivity和MyFragment中,我們都使用了getApplication()方法來獲取MyApplication實(shí)例,并從MyApplication實(shí)例中獲取ViewModel實(shí)例。

總之,可以根據(jù)自己的需求選擇合適的方法來共享ViewModel實(shí)例。文章來源地址http://www.zghlxwxcb.cn/news/detail-551232.html

到了這里,關(guān)于【Android】怎么使用一個(gè)ViewModel用在多個(gè)Activity或者Fragment中的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android Jetpack 從使用到源碼深耕【ViewModel從實(shí)踐到原理 】(三)

    上文,我們通過簡(jiǎn)單的ViewModel使用源碼入手,對(duì)其源碼進(jìn)行閱讀,原理進(jìn)行了簡(jiǎn)單總結(jié),簡(jiǎn)單來說,ViewModel是通過Activity的onRetainNonConfigurationInstance 與 getLastNonConfigurationInstance的自動(dòng)調(diào)用,實(shí)現(xiàn)了 ViewModel數(shù)據(jù)的存儲(chǔ)和恢復(fù),數(shù)據(jù)存儲(chǔ)在ViewModelStore的map中,更加明確的話,應(yīng)該是

    2024年02月04日
    瀏覽(62)
  • Android之Activity使用方法

    Android之Activity使用方法

    【 Activity 】 一個(gè)Activity是一個(gè)應(yīng)用程序組件,提供一個(gè)屏幕,用戶可以用來交互為了完成某項(xiàng)任務(wù),例如撥號(hào)、拍照、發(fā)送email、看地圖。每一個(gè)activity被給予一個(gè)窗口,在上面可以繪制用戶接口。窗口通常充滿屏幕,但也可以小于屏幕而浮于其它窗口之上。 一個(gè)應(yīng)用程序通

    2024年02月07日
    瀏覽(12)
  • zeromq怎么一個(gè)端口發(fā)送多個(gè)主題

    我們這里使用czmq4 版本處理。 在CZMQ的版本4中,在一個(gè)端口上發(fā)布多個(gè)訂閱主題。這是通過使用PUB/SUB模式實(shí)現(xiàn)的。在這種模式下,一個(gè)或多個(gè)發(fā)布者將消息發(fā)布到一個(gè)或多個(gè)主題,然后一個(gè)或多個(gè)訂閱者可以訂閱一個(gè)或多個(gè)主題來接收消息。 在發(fā)布者端,你可以通過將主題

    2024年02月05日
    瀏覽(89)
  • 一個(gè)或多個(gè)音頻服務(wù)未運(yùn)行怎么修復(fù)?

    一個(gè)或多個(gè)音頻服務(wù)未運(yùn)行怎么修復(fù)?

    電腦如果顯示一個(gè)或多個(gè)音頻服務(wù)未運(yùn)行,就會(huì)導(dǎo)致無法播放電腦系統(tǒng)聲音,那么下面就來看看具體的修復(fù)方法。 電腦顯示一個(gè)或多個(gè)音頻服務(wù)未運(yùn)行? 1、“win”+R鍵彈出命令提示框,輸入services.msc點(diǎn)擊確定,打開“服務(wù)”界面。 2、檢查“Plug and Play”和“Power”服務(wù)是否已

    2024年02月15日
    瀏覽(23)
  • python怎么將多個(gè)矩陣合并為一個(gè)多維矩陣

    在 Python 中,可以使用 NumPy 庫(kù)來合并多個(gè)矩陣為一個(gè)多維矩陣。 NumPy 提供了一個(gè)名為 concatenate 的函數(shù),可以將多個(gè)矩陣沿指定的軸合并為一個(gè)矩陣。例如,如果要將兩個(gè)二維矩陣沿著垂直軸合并為一個(gè)三維矩陣,可以使用如下代碼: 輸出結(jié)果為: 另外,還可以使用 stack 函

    2024年02月11日
    瀏覽(16)
  • Android的ViewModel

    Android的ViewModel

    在Compose的學(xué)習(xí)中,我們?cè)诳山M合函數(shù)中使用rememberSaveable ??????? 保存應(yīng)用數(shù)據(jù),但這可能意味著將邏輯保留在可組合函數(shù)中或附近。隨著應(yīng)用體量不斷變大,您應(yīng)將數(shù)據(jù)和邏輯從可組合函數(shù)中移出。 而在之前的應(yīng)用架構(gòu)學(xué)習(xí)中,我們接觸到了MVVM架構(gòu),他將應(yīng)用數(shù)據(jù)

    2024年02月21日
    瀏覽(17)
  • Android kotlin系列講解(入門篇)使用Intent在Activity之間穿梭

    返回總目錄 上一篇: Android kotlin系列講解(入門篇)Activity的理解與基本用法 ???????你應(yīng)該已經(jīng)對(duì)創(chuàng)建 Activity 的流程比較熟悉了,那我現(xiàn)在在 ActivityTest 項(xiàng)目再快速地創(chuàng)建一個(gè) Activity 。 ???????還是右擊 com.example.activitytest 包→ New → Activity → Empty Views Activity ,會(huì)彈出

    2024年02月12日
    瀏覽(25)
  • springboot整合rocketmq:一個(gè)消費(fèi)者組怎么訂閱多個(gè)topic

    springboot整合rocketmq:一個(gè)消費(fèi)者組怎么訂閱多個(gè)topic

    ????????一個(gè)消費(fèi)者組中的所有消費(fèi)者訂閱關(guān)系,可以多個(gè)topic,多個(gè)tag,但是必須一致,否則就倒沫子了,如下圖: ?下面貼了如下結(jié)構(gòu)的代碼 ?一個(gè)消費(fèi)組(消費(fèi)者)訂閱多個(gè)topic的代碼(只寫了一個(gè)消費(fèi)組的,其他類似): 結(jié)果:

    2024年02月15日
    瀏覽(26)
  • Android JetPack 深入分析ViewModel源碼

    Android JetPack 深入分析ViewModel源碼

    本文主要分析 ViewModel 相關(guān)源碼,相關(guān)使用不再贅述,可參考Android ViewModel使用; ViewModel 概覽 Google官方給的 ViewModel 定義如下: 定義主要提到兩個(gè)關(guān)鍵點(diǎn): 生命周期 上圖是Google官網(wǎng)提供的 ViewModel生命周期圖示 ,可以看到 ViewModel 的生命周期是從 onCreate 創(chuàng)建到 完成并銷毀

    2024年02月11日
    瀏覽(25)
  • Android Jetpack組件架構(gòu):ViewModel的原理

    Android Jetpack組件架構(gòu):ViewModel的原理

    本篇文章是關(guān)于介紹ViewModel的,由于ViewModel的使用還是挺簡(jiǎn)單的,這里就不再介紹其的基本應(yīng)用,我們主要來分析ViewModel的原理。 眾所周知,一般使用ViewModel是用來解決兩個(gè)問題的,第一個(gè)就是關(guān)于設(shè)備配置發(fā)生改變時(shí)Activity先前狀態(tài)的保存,在ViewModel出來之前我們一般會(huì)使

    2024年02月07日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包