代码之家  ›  专栏  ›  技术社区  ›  Ümañg ßürmån

即使添加了viewModel:android架构组件,配置也会发生变化

  •  -1
  • Ümañg ßürmån  · 技术社区  · 6 年前

    我添加了一个 视图模型 类从 生命周期 体系结构库。但它在我的代码中不起作用。我做错什么了。我刚接触到Android的ViewModelArch组件。

    这是我的代码:

    Gradle:

    dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    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'
    
    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:1.1.1"
    
    }
    

    ViewModel:

    import android.arch.lifecycle.MutableLiveData;
    import android.arch.lifecycle.ViewModel;
    
    public class NameViewModel extends ViewModel {
    
    // Create a LiveData with a String
    private MutableLiveData<String> mCurrentName;
    
    public MutableLiveData<String> getmCurrentName() {
        if (mCurrentName == null) {
            mCurrentName = new MutableLiveData<>();
        }
        return mCurrentName;
    }
    
    }
    

    mainactivity.java(主活动.java)

    import android.arch.lifecycle.Observer;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v7.app.AppCompatActivity;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
    
    private NameViewModel nameViewModel;
    
    private TextView lblText;
    private EditText txtValue;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        lblText = findViewById(R.id.textview);
        txtValue = findViewById(R.id.editText);
    
        final Observer<String> nameObserver = new Observer<String>() {
            @Override
            public void onChanged(@Nullable String data) {
    
                lblText.setText(data);
    
            }
        };
    
        nameViewModel.getmCurrentName().observe(this, nameObserver);
    
        txtValue.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
            }
    
            @Override
            public void onTextChanged(CharSequence value, int start, int before, int count) {
                nameViewModel.getmCurrentName().setValue(value.toString());
            }
    
            @Override
            public void afterTextChanged(Editable s) {
    
            }
        });
    
      }
    }
    

    我是否遗漏了一些必要的东西?

    任何帮助都将不胜感激。非常感谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Levon Petrosyan    6 年前

    onCreate

    nameViewModel = ViewModelProviders.of(this, null).get(NameViewModel.class);
    

    this this ViewModelProvider.Factory