首页 > 解决方案 > Android 中 Fragments 之间的 RoomDB 同步

问题描述

我有一个将数据存储在房间数据库中的应用程序。这是一个电影应用程序,当用户将新电影添加到他的列表时,它不会同步工作。当我关闭应用程序并再次打开时,列表将被更新。用户添加电影按钮在一个片段中,列表在另一个片段中。它们不在同一个片段中。它添加数据库没有问题,但我需要在这两个片段之间进行同步。

这是列表片段。

public class ListFragment extends Fragment {

    ImageView listTitleImage;
    RecyclerView recyclerView;

    List<MainData> dataList = new ArrayList<>();
    LinearLayoutManager linearLayoutManager;
    RoomDB database;
    RecyclerViewFavoritesAdapter adapter;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment_list,container,false);
        listTitleImage = v.findViewById(R.id.listTitleImage);
        recyclerView = v.findViewById(R.id.recyclerViewFavorites);

        database = RoomDB.getInstance(v.getContext());

        dataList = database.mainDao().getAll();

        linearLayoutManager = new LinearLayoutManager(v.getContext());

        recyclerView.setLayoutManager(linearLayoutManager);

        adapter = new RecyclerViewFavoritesAdapter(v.getContext(),dataList);

        recyclerView.setAdapter(adapter);

        return v;
    }
}

这是菜单单击方法,其中包括添加列表。

@Override
    public boolean onMenuItemClick(MenuItem item) {


        if(item.getItemId() == R.id.menuAdd){

            int movie_id = resultList.get(pos).getMovieId();
            String title = resultList.get(pos).getTitle();
            String posterpath = resultList.get(pos).getPoster_path();

            database = RoomDB.getInstance(context);

            MainData mainData = new MainData();

            mainData.setMovie_id(movie_id);
            mainData.setMovie_name(title);
            mainData.setMovie_poster(posterpath);

            int movie_id_in_database = database.mainDao().get_movie_id(movie_id);

            if(movie_id_in_database == 0){
                database.mainDao().insert(mainData);
            } else{
                Toast.makeText(context, "You already have that movie in list !", Toast.LENGTH_SHORT).show();
            }


            return true;

        }
        else if(item.getItemId() == R.id.menuShowDetails){

            int movieId = resultList.get(pos).getMovieId();
           // Intent intent1 = new Intent(context, MovieDetails.class);
           // intent1.putExtra("movie_id",movieId);
           // context.startActivity(intent1);
            return true;

        }
        return false;
    }

标签: androidandroid-fragmentsandroid-room

解决方案


推荐阅读