ভিউমোডেলপ্রভাইডারগুলি ১.১.০-এ অবমুক্ত করা হয়েছে


148

এর জন্য গুগল ডক্সের দিকে তাকিয়ে ViewModel, তারা কীভাবে পাবেন সে সম্পর্কে নীচের নমুনা কোডটি দেখায় ViewModel:

val model = ViewModelProviders.of(this).get(MyViewModel::class.java)

সর্বশেষতম নির্ভরতা ব্যবহার করার android.arch.lifecycle:extensions:1.1.1সময় এ জাতীয় শ্রেণি নেই ViewModelProviders

এর জন্য ডকুমেন্টেশনে গিয়ে ViewModelProvidersআমি একটি মন্তব্য দেখেছি:

এই শ্রেণীটি এপিআই স্তরের ১.১.০ এ অবমুক্ত করা হয়েছিল। ভিউমোডেলপ্রাইডার.অ্যান্ড্রয়েডভিউ মডেলফ্যাক্টরি ব্যবহার করুন

সমস্যাটি হ'ল ব্যবহার করার চেষ্টা করার সময় এর উদাহরণটি পাওয়ার ViewModelProvider.AndroidViewModelFactoryজন্য কোনও সমতুল্য ofপদ্ধতি খুঁজে পাচ্ছে না ViewModel

আমি যা করার চেষ্টা করেছি:

ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(PlayerViewHolder::class.java)

এই পদ্ধতির নাম create, আমি যতবার বলি ততবার ভিডমোডেলের একটি নতুন উদাহরণ পাই, যা আমার পরে নেই।

কোনও ধারণা উপরে বর্ণনামূলক কোড প্রতিস্থাপন কি?


সিঙ্গেলটন প্যাটার্ন ব্যবহার করুন বা অ্যান্ড্রয়েডএক্স
ওসীমা অ্যারোভা

উত্তর:


31

আপডেট 2020-06-16 : বর্তমানে হ্রাস করাViewModelProviders হয় এবং আর ব্যবহার করা উচিত নয়। এই প্রশ্নোত্তরটি 2018 সালের শেষের দিকে ছিল, যখন এটি ছিল না। এই প্রশ্ন ও উত্তরটি ViewModelProvidersAndroidX সংস্করণ নয়, পুরানো আর্কিটেকচার উপাদানগুলির সংস্করণের জন্য ।


সর্বশেষতম নির্ভরতা ব্যবহার করার android.arch.lifecycle:extensions:1.1.1সময় এ জাতীয় শ্রেণি নেই ViewModelProviders

হ্যা এখানে. এটি প্রদর্শন করতে:

  • অ্যান্ড্রয়েড স্টুডিও 3.2.1 এ একটি নতুন প্রকল্প তৈরি করুন (কোটলিন, minSdkVersion21, "খালি কার্যকলাপ" টেমপ্লেট সহ)

  • মডিউলটির android.arch.lifecycle:extensions:1.1.1নির্ভরতা যুক্ত করুনapp

এটি আপনাকে একটি app/build.gradleপছন্দ দেবে:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.commonsware.myandroidarch"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'android.arch.lifecycle:extensions:1.1.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

তারপরে আপনি সেই পাঠাগারটি সেই শ্রেণীর সাথে "বাহ্যিক গ্রন্থাগারগুলি" তে প্রদর্শিত হবে:

বাহ্যিক গ্রন্থাগারসমূহ

এবং আপনি যে শ্রেণীর রেফারেন্স করতে সক্ষম হবেন:

package com.commonsware.myandroidarch

import android.arch.lifecycle.ViewModelProviders
import android.support.v7.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

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

    val provider = ViewModelProviders.of(this)
  }
}

ভিউমোডেলপ্রভাইডারদের জন্য ডকুমেন্টেশনে গিয়ে আমি একটি মন্তব্য দেখলাম যা বলছিল: এই শ্রেণিটি এপিআই স্তরের ১.১.০ এ অবচিত করা হয়েছিল। ভিউমোডেলপ্রাইডার.অ্যান্ড্রয়েডভিউ মডেলফ্যাক্টরি ব্যবহার করুন

সেই মন্তব্যটি ViewModelProviders.DefaultFactoryক্লাস এন্ট্রির নীচে এবং সেই শ্রেণিকে বোঝায়, নয় ViewModelProviders:

ডকুমেন্টেশন স্ক্রিনশট

কোনও ধারণা উপরে বর্ণনামূলক কোড প্রতিস্থাপন কি?

ব্যবহার ViewModelProviders


1
@ তারেকখৌরী: এটি তার ব্যাখ্যা করবে! কোন মডিউলগুলির জন্য কোন নির্ভরতা অবশ্যই অব্যাহত তা ট্র্যাক করে রাখা একটি চ্যালেঞ্জ হতে পারে। আপনি এটি কাজ করে শুনে শুনে আমি আনন্দিত!
কমন্সওয়্যার

12
এটি আর সত্য নয়, ViewModelProviders.of()আর বিদ্যমান নেই।
এপিকপান্ডাফোরস

321

আমি লাইফাইসাইকেল-এক্সটেনশন 2.2.0সংস্করণ ব্যবহার করি :

implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" 

এটি কাজ করা উচিত, ViewModelProviderকনস্ট্রাক্টর ব্যবহার করে ।

// With ViewModelFactory   
val viewModel = ViewModelProvider(this, YourViewModelFactory).get(YourViewModel::class.java)


//Without ViewModelFactory
val viewModel = ViewModelProvider(this).get(YourViewModel::class.java)

2020/5/15 আপডেট

আমি অর্জনের জন্য আরেকটি মার্জিত উপায় পাই, অ্যান্ড্রয়েড কেটিএক্স সহায়তা করতে পারে

implementation "androidx.fragment:fragment-ktx:1.2.4"
val viewmodel: MYViewModel by viewModels()
val viewmodel: MYViewModel by viewModels { myFactory } //With factory

রেফ: https://developer.android.com/references/kotlin/androidx/fraament/app/package- সামুদ্রিক# ভিউ মডেল

2020/06/25: প্রতিনিধি ক্ষেত্রে সংশোধন


158
গুগলের নিয়মিত "অবমূল্যায়ন" চক্রের জন্য আমি এক ধরণের অসুস্থ sick
এএফডি

3
ভিউমোডেলপ্রভাইডার্স.ওফ () অবমূল্যায়ন করা হয়েছে। একই কার্যকারিতা অর্জনের জন্য আপনি নতুন ভিউমোডেলপ্রাইডার (ভিউমোডেল স্টোরঅউনার) কনস্ট্রাক্টরের কাছে একটি টুকরা বা ফ্রেগমেন্টঅ্যাক্টিভিটি পাস করতে পারেন। (aosp / 1009889)
রঘু কৃষ্ণন আর

31
জাভা সমতুল্য:YourViewModel viewModel = new ViewModelProvider(this).get(YourViewModel.class);
নিষিদ্ধ-জিওইনজিনিয়ারিং

16
আমি উদ্বেগ প্রকাশ করি যদি কোনও দিন গুগল কোনও নতুন উপাদানকে অবমূল্যায়ন করে TextViewবা EditTextপ্রবর্তন করে।
প্রঞ্জল চোলধারা

4
androidx lifecycle-viewmodel 2.1.0 এর কারখানা ছাড়া কোনও কনস্ট্রাক্টর নেই। সহজভাবে ব্যবহার করা (এটি) কাজ করে না। ভিউমোডেলপ্রভাইডার (ভিউমোডেল স্টোর ওভনার, ফ্যাক্টরি) এবং ভিউমোডেলপ্রাইডার (ভিউমোডেল স্টোর, ফ্যাক্টরি) একমাত্র
নির্মাতা

70

@ ফ্যান্টাসি ফ্যাং যেমন তার উত্তরে উল্লিখিত হয়েছে, lifecycle:lifecycle-extensionsএই মুহুর্তে এটির জন্য সর্বশেষতম সংস্করণটি ব্যবহার করুন 2.2.0-alpha03। সুতরাং আপনার বিল্ড.gradle ফাইলটিতে নিম্নলিখিত লাইনটি যুক্ত করা উচিত:

implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0-alpha03' 

যারা জাভা ব্যবহার করছেন, এই সমস্যা সমাধানের জন্য, ViewModelProvider এর সরাসরি ঐ আর্গুমেন্ট পাস কন্সট্রাকটর :

MyViewModel viewModel = new ViewModelProvider(this, myViewModelFactory).get(MyViewModel.class);

বা যদি আপনি কোনও কারখানা ব্যবহার না করেন তবে সহজভাবে ব্যবহার করুন:

MyViewModel viewModel = new ViewModelProvider(this).get(MyViewModel.class);

আপনার কারখানার বস্তুটি পাস না করে।


1
হিসাবে উল্লেখ করা আপনি build.gradle নিম্নোক্ত ব্যবহার করা উচিত: বাস্তবায়ন "$ lifecycle_version androidx.lifecycle: জীবনচক্র-viewmodel" developer.android.com/jetpack/androidx/releases/lifecycle জীবনচক্র-এক্সটেনশানগুলি API গুলি অবচিত হয়েছে। পরিবর্তে, আপনার প্রয়োজনীয় নির্দিষ্ট লাইফাইসাইকেল শিল্পকর্মগুলির জন্য নির্ভরতা যুক্ত করুন।
কেনেথ আরগো

40

২.২.০ হিসাবে জীবনচক্র-এক্সটেনশনগুলি হ্রাস করা হয়েছে। পড়ুন গুগল ডকুমেন্টেশন

এটি পৃষ্ঠাটি থেকে কাটা:

লাইফাইসাইকেল-এক্সটেনশনের এপিআইগুলি হ্রাস করা হয়েছে। পরিবর্তে, আপনার প্রয়োজনীয় নির্দিষ্ট লাইফাইসাইকেল শিল্পকর্মগুলির জন্য নির্ভরতা যুক্ত করুন।

নতুন গ্রন্থাগারগুলি হ'ল:

// ViewModel and lifecycle support for java
implementation "androidx.lifecycle:lifecycle-viewmodel:${versions.lifecycle}"
implementation "androidx.lifecycle:lifecycle-livedata:${versions.lifecycle}"

// ViewModel and lifecycle support for kotlin
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${versions.lifecycle}"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:${versions.lifecycle}"

জাভা জন্য নতুন কোড:

viewModel = new ViewModelProvider(this).get(MyViewModel.class);

বা কোটলিনের জন্য:

viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

আমরা কী ভিউমোডেলপ্রাইডারকে রেখেছি বা এটিকে আবার পুনরায় তৈরি করতে হবে, সেক্ষেত্রে সমস্ত অন্তর্নিহিত দৃষ্টান্তগুলিও ধ্বংস হয়ে যাবে।
ভাগে


21

২০২০ সালের গোড়ার দিকে, গুগল ভিউমোডেলপ্রভাইডার ক্লাসটি অবমূল্যায়ন করেছে অ্যান্ড্রয়েড লাইফসাইকেল লাইব্রেরির ২.২.০ সংস্করণে অবমূল্যায়ন করেছে।

ভিউমোডেলের উদাহরণ তৈরি করার জন্য এখন ভিউমোডেলপ্রভাইডারগুলি ব্যবহার করার দরকার নেই, আপনি তার পরিবর্তে ভিউমোডেলপ্রাইডার কনস্ট্রাক্টরের কাছে আপনার খণ্ড বা ক্রিয়াকলাপ উদাহরণটি পাস করতে পারেন।

আপনি যদি কোডটি ব্যবহার করেন তবে:

val viewModel = ViewModelProviders.of(this).get(CalculatorViewModel::class.java)

আপনি একটি সতর্কতা পাবেন যাবেন ভিউমডেলপ্রভাইডারগুলি হ্রাস করা হয়েছে।

অবহেলিত লাইব্রেরি ব্যবহার এড়াতে নিম্নলিখিত পরিবর্তনগুলি করুন:

  1. বিল্ড.gradle (মডিউল: অ্যাপ) ফাইলে, লাইফসাইकल উপাদানগুলির সংস্করণ 2.2.0 ব্যবহার করুন:

    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
    implementation "androidx.activity:activity-ktx:1.1.0"

    আপনি যদি এর পরিবর্তে কোনও খণ্ড থেকে ভিউমোডেলটি ব্যবহার করতে চান তবে ব্যবহার করুন

    implementation "androidx.fragment:fragment-ktx:1.2.2"

    খণ্ড-কেটিএক্স স্বয়ংক্রিয়ভাবে ক্রিয়াকলাপ-কেটিএক্স অন্তর্ভুক্ত করে, তাই আপনাকে নির্ভরতা উভয়টি নির্দিষ্ট করার দরকার নেই।

  2. অ্যান্ড্রয়েড বিভাগে আপনাকে জাভা 8 নির্দিষ্ট করতে হবে:

    android {
        compileSdkVersion 28
        defaultConfig {
            applicationId "com.kgandroid.calculator"
            minSdkVersion 17
            targetSdkVersion 28
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner 
        "androidx.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 
               'proguard-rules.pro'
            }
        }
    
        kotlinOptions { jvmTarget = "1.8" }
    }
  3. আপনার খণ্ড বা ক্রিয়াকলাপে, আমদানিটিকে এতে পরিবর্তন করুন:

    androidx.activity.viewModels আমদানি করুন

  4. একটি ভিউমোডেল তৈরি করার কোডটি তখন পরিণত হয়:

    val viewModel: CalculatorViewModel by viewModels()

    পরিবর্তে

    val viewModel = ViewModelProviders.of(this).get(CalculatorViewModel::class.java)

    ভিউমোডেল অবজেক্টটি এটি হিসাবে ব্যবহার করুন:

    val viewModel: CalculatorViewModel by viewModels()
    
    viewModel.newNumber.observe(this, Observer<String> { 
        stringResult -> newNumber.setText(stringResult) 
    })

    কোথায় নিউউমার একটি লাইভ ডেটা অবজেক্ট

    ক্রিয়াকলাপের ভিউমোডেলটি আপনি ভাগ করতে চান এমন একটি খণ্ডে আপনি ব্যবহার করতে পারেন

    val viewModel: CalculatorViewModel by activityViewModels()

এটি (অবমানিত) ViewModelProviders.of()ফাংশনে ক্রিয়াকলাপের উদাহরণটি পাস করার সমতুল্য ।


17

ভিউমোডেলপ্রভাইডার্স.ওফ () অবমূল্যায়ন করা হয়েছে। এখানে চিত্র বর্ণনা লিখুন

তারা এখন ডিফল্ট ভিউমোডেলপ্রভাইডার.ফ্যাক্টরী ভূমিকা হ্যান্ডেল করার সাথে সাথে সরাসরি ভিউমোডেলপ্রাইডার কনস্ট্রাক্টর ব্যবহার করুন।

 mainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);

13

হ্যাঁ @ তারেক, এটি হ্রাস করা হয়েছে। অ্যান্ড্রয়েডএক্সের সাথে এখন ব্যবহার করুন:

val yourViewModel = ViewModelProvider.NewInstanceFactory().create(YourVideoModel::class.java)

5
এই উত্তরটি ভুল। আপনি ViewModelProvider(viewModelStoreOwner, factory).get(YourVideoModel::class.java)অন্যথায় আপনার onCleared()সঠিকভাবে কাজ করবে না ব্যবহার করা উচিত , এবং ভিউমোডেল কনফিগার চেঞ্জের বাইরে রাখা হবে না। এই উত্তরটি ব্যবহার করবেন না।
এপিকপান্ডাফোরস

12

সম্ভবত আপনি কেবল ব্যবহার করতে পারেন:

val viewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(MyViewModel::class.java)

android.arch.lifecycle:extensions:1.1.1নির্ভরতা হিসাবে যোগ করার প্রয়োজন ছাড়া ।



8

আমি ব্যবহার করছি android Xএবং এই সমস্যা ছিল।

প্রথমত , আপনার নিজের মধ্যে এই নির্ভরতা যুক্ত করা উচিত Gradle:

implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" 

আমার ক্ষেত্রে, if lifecycle_version ছিল 2.2.0-rc02

দ্বিতীয়: এর জন্য আমদানি ViewModelProviderহওয়া উচিত:

import androidx.lifecycle.ViewModelProvider

নীচের উদাহরণগুলির মতো আপনি নিজের ভিউ মডেলটি শুরু করতে পারেন তার চেয়ে বেশি:

val viewModel = ViewModelProvider(this, YourFactoryInstace).get(MainViewModel::class.java)

val viewModel = ViewModelProvider(this).get(MainViewModel::class.java)

আপনার উত্তরের জন্য আপনাকে ধন্যবাদ, তবে আমি যখন এটি ব্যবহার করি তখন ভিউ মডেল পর্যবেক্ষণ এবং ক্ষেত্রগুলি ডেটাবাইন্ডিংয়ের আর কাজ হয় না
মোসা

আমি বিশ্বাস করি এর androidx.lifecycle:lifecycle-compilerদ্বারা অচল androidx.lifecycle:lifecycle-common-java8
বিনেকে 21

8

আসলে, ViewModelProviders.of()পদ্ধতিটি হুডের নীচে কী করে ?

@Deprecated
@NonNull
@MainThread
public static ViewModelProvider of(@NonNull Fragment fragment) {
    return new ViewModelProvider(fragment);
}

এটি Fragmentএকটি আর্গুমেন্ট হিসাবে গ্রহণ করে, ViewModelProviderবস্তু তৈরি করে এবং খণ্ডটি সরাসরি সরিয়ে দেয়ViewModelProvider কনস্ট্রাক্টরে ।

আমরাও একইভাবে ব্যবহার করতে পারি।

যেমন:

OurViewModel mOurViewModel = ViewModelProviders.of(this).get(OurViewModel.class);

পরে:

OurViewModel mOurViewModel = new ViewModelProvider(this).get(OurViewModel.class);

আপনি যদি কারখানাটি বাস্তবায়ন করেন তবে আপনার আরও একটি উপায় রয়েছে: ViewModelProviderএমন একটি নির্মাতা রয়েছে যা এ ViewModelStoreOwnerএবং এ উভয়ই প্রত্যাশা করে Factory
রাসেলহফ


3

আমি কোনও বিশেষজ্ঞ নই তবে আমার কাছে কোডের একটি লাইন আছে যা জাভাতে আমার সমস্যা সমাধান করেছে। আশা করি এটি কাউকে সাহায্য করবে।

viewModel = 
new ViewModelProvider
.AndroidViewModelFactory(getApplication())
.create(ViewModel.class);

যেমনটি আমি বলেছিলাম আমি আরও বিশদ সরবরাহ করতে চাই তবে এটি আমার জন্য এই সমস্যাটি স্থির করেছে।


এই কোডটি ভুল, onCleared()এইভাবে বলা হবে না এবং আপনার ভিউমোডেলটি প্রতিবার পুনরায় তৈরি করা হবে (কনফিগার পরিবর্তনের জন্য রাখা হয়নি)।
এপিকপান্ডাফোরস

আপনি একটি নির্দিষ্ট উদাহরণ দিয়ে আরও কিছুটা ব্যাখ্যা করতে পারেন, আমার ভুলটি কী ঠিক করবে? দয়া করে ব্যাখ্যা বা এমন কোনও বিষয় যা একটি বিষয় পরিষ্কার করে
তুলবে

viewModel = new ViewModelProvider(this).get(MyViewModel.class)। যদি আপনি AndroidViewModelএটি না পান Application, তবে আপনার জীবনচক্র এবং ক্রিয়াকলাপ / খণ্ডের মধ্যে একটি সংস্করণ মিলছে না।
এপিকপান্ডাফোরস

ঠিক আছে, তাই getapplicationContext কল করা ভুল? এটি কি শুধু getContext হওয়া উচিত?
জিপি

1
সমস্যাটি একটি এর new ViewModelProvider.AndroidViewModelFactory(পরিবর্তে তৈরি করছে new ViewModelProvider(
এপিকপান্ডাফোরস

3

এটা ব্যবহার কর:

YourViewModel yourViewModel = new ViewModelProvider.AndroidViewModelFactory(getApplication()).create(YourViewModel.class);

2

পরিবর্তে আপনি এটি ব্যবহার করতে পারেন:

viewModel= ViewModelProvider(this).get(YourViewModel::class.java)

প্রথম বন্ধনে থাকা "এটি" হ'ল আপনার ভিউমোডেল দৃষ্টান্তের মালিক।


1

এই উত্তরটি জাভার জন্য তবে আপনি মূল বিষয়টি বুঝতে পারবেন। সমাধান হ'ল আপনার ভিউমোডেলপ্রোভাইডার ব্যবহার করা দরকার কারণ ভিউমোডেলপ্রভাইডাররা হ্রাস পেয়েছে :

//Do not forget import it.
import androidx.lifecycle.AndroidViewModel;

ViewModelProvider.AndroidViewModelFactory(getApplication()).create(YourViewModel.class);

ব্যবহারের উদাহরণটি হ'ল:

YourViewModel yourViewModel = new ViewModelProvider.AndroidViewModelFactory(getApplication()).create(YourViewModel.class);

এছাড়াও, গ্রেডল নির্ভরতা আপডেট করতে ভুলবেন না : সেগুলির সর্বশেষ সংস্করণগুলির জন্য এখানে চেক করুন

implementation 'androidx.lifecycle:lifecycle-viewmodel:2.2.0'
annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.2.0'

!!! তবে, সাবধান থাকুন কারণ কিছু উত্তর এই সমাধানের প্রস্তাব দেয় তবে এটি আমার পক্ষে কার্যকর হয়নি:

yourViewModel = new ViewModelProvider(this).get(YourViewModel.class);

কারণ আমি যখন এইভাবে ব্যবহার করেছি তখন ত্রুটি বার্তার নীচে পেয়েছি:

দ্বারা সৃষ্ট: জাভা.লং.রুনটাইম এক্সসেপশন: com.canerkaseler.mvvmexample.ViewModel শ্রেণীর উদাহরণ তৈরি করা যায় না

@canerkaseler


এই উত্তরটি ভুল। আপনাকে কারখানাটি ভিউমোডেলপ্রোভাইডারে পাস করতে হবে। আপনি যদি সরাসরি প্রার্থনা করেন createতবে onCleared()সঠিক কাজ করবে না।
এপিকপান্ডাফোরস

আসলে, আপনি আক্ষরিকভাবে ঠিক বলেছেন সঠিক উত্তরটি ব্যবহার করবেন না। আপনার androidx.coreএবং আপনার androidx.lifecycleনির্ভরতার মধ্যে কোনও মিল নেই বলে মনে হচ্ছে ।
এপিকপান্ডাফোরস

সাধারণত আমি কারখানাটি ভিউমোডেলপ্রভাইডারে লিখেছিলাম। তবে আপনি এটি মুছে ফেলেছেন। কন্টাক্টভিউমোডেল কন্টাক্টভিউমোডেল = নতুন ভিউমোডেলপ্রোভিডার .এন্ড্রয়েডভিউমোডেলফ্যাক্টরি (getApplication ()) তৈরি করুন (কন্টাক্টভিউমোডেল.class); আপনি আমার উত্তরে এটি মুছলেন কেন? আপনি ভুল কোড পাস করেছেন।
ক্যানারকেসেলার

0

আপনি যখন ডাগর ব্যবহার করেন তখন আপনি কনস্ট্রাক্টরে কারখানাটি পাস করবেন

  MobileViewModel mobileViewModel = new ViewModelProvider(this,providerFactory).get(MobileViewModel.class);

-2

আপনার যদি এই বাস্তবায়ন থাকে

'implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'

ব্যবহার করার চেষ্টা করুন viewModel = MainViewModel()


এটি কোনও ভিউ মডেল ইনস্ট্যান্ট করার কোনও উপায় নয়। আপনাকে অবশ্যই এর জন্য ভিউমোডেলপ্রোভাইডার ক্লাসটি ব্যবহার করতে হবে
ইমানুয়েল মাতালি

-2

এটা চেষ্টা কর...

 LocationViewModel locationViewModel = new ViewModelProvider(this).get(LocationViewModel.class);

-5

এটি এইভাবে কাজ করা উচিত

 viewModel = ViewModelProviders.of(this@MainActivity).get(MainActivityViewModel::class.java)

1
আপনার কোডটি উদাহরণ হিসাবে দেখিয়েছে যে শ্রেণিটি জীবনচক্রের ইভেন্টগুলিতে সঠিকভাবে প্রতিক্রিয়া জানাতে ভিউ মডেল শ্রেণির থাকা ভিউ স্টেটের সাথে সংযোগ তৈরি করবে না। আপনাকে মডেলগুলি সঠিক পদ্ধতিতে দেখতে হবে যাতে তারা তাদের পিতামাতার জীবনচক্রের প্রতিক্রিয়া জানায় এবং সম্মান জানায় অন্যথায় তারা প্রতিবার তাজা এবং ফাঁকা তৈরি করা যায়।
কেনেথ আরগো

ওপি এবং অন্যদের দ্বারা উপরে উল্লিখিত হিসাবে; ভিউমোডেলপ্রভাইডার্স ক্লাসটি হ্রাস করা হয়েছে। দেখুন: বিকাশকারী.অ্যান্ড্রয়েড.
com/references
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.