Свяжите счетчик с моделью представления, используя MVVM, и сохраните данные о вращении. - PullRequest
0 голосов
/ 27 сентября 2019

Моя проблема в том, что я реализовал шаблон MVVM со счетчиком.

Но при вращении устройства и его данные снова загружаются, например, для.если я выбрал конкретное значение из счетчика, когда устройство поворачивается, это значение теряется.

Я беру данные категории книг из базы данных комнат, и это живые данные, и передаю их в адаптер массива, который реализуется с помощью счетчика.

Столкнулись с этой проблемой в течение 2 дней и не смогли ее решить. Кто-нибудь может помочь найти любой код, который может исправить ее в Java.

Перепробовал много решений, но они не работали.

Основная деятельность

public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding binding;
    private MainActivityViewModel mainActivityViewModel;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding= DataBindingUtil.setContentView(this,R.layout.activity_main);
        binding.setLifecycleOwner(this);
        mainActivityViewModel= ViewModelProviders.of(this).get(MainActivityViewModel.class);

        mainActivityViewModel.getCategories().observe(this, new Observer<List<Category>>() {
            @Override
            public void onChanged(List<Category> categories) {

                ArrayAdapter<Category> listArrayAdapter=new ArrayAdapter<Category>(MainActivity.this,R.layout.spinner_item,categories);
                listArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
                binding.spinner.setAdapter(listArrayAdapter);
                Toast.makeText(MainActivity.this,"Spinner created",Toast.LENGTH_SHORT).show();

            }
        });

    }
}

ViewModel

//for room database
public class MainActivityViewModel extends AndroidViewModel {

    private EBookShopRepository bookShopRepository;
    private LiveData<List<Category>> categories;

    public MainActivityViewModel(@NonNull Application application) {
        super(application);

        bookShopRepository=new EBookShopRepository(application);

    }

    public LiveData<List<Category>> getCategories() {
        Log.v("Data load","true");
        categories=bookShopRepository.getCategories();
        return categories;
    }
}

Класс репозитория

public class EBookShopRepository {
    private CategoryDAO categoryDAO;
    private BookDAO bookDAO;

    private LiveData<List<Category>> categories;
    private LiveData<List<Book>> books;
    private LiveData<Book> book;

    //Initialize all the things here
    public EBookShopRepository(Application application) {
        BooksAppDatabase booksAppDatabase=BooksAppDatabase.getInstance(application);
        categoryDAO=booksAppDatabase.getCategoryDAO();
        bookDAO=booksAppDatabase.getBooksDAO();
    }

    public LiveData<List<Category>> getCategories() {
        return categoryDAO.getAllCategories();
    }

DAO

@Dao()
public interface CategoryDAO {

    @Insert
    long addCategory(Category category);

    @Delete
    void deleteCategory(Category category);

    @Query("Select * from tbl_categories")
    LiveData<List<Category>>  getAllCategories();


}
...