Повторный просмотр потерянных данных при повороте дисплея, данные загружаются при нажатии кнопки pu sh Android - PullRequest
0 голосов
/ 11 февраля 2020

извините за мой плохой английский sh

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

https://github.com/elviss116/androidMvvm-master

Это фрагмент:

public class MovieListFragment extends Fragment {

    private MovieListViewModel mViewModel;
    private List<MovieModel.DataModel> movieList = new ArrayList<>();
    private RecyclerView recyclerView;
    private MoviesAdapter mAdapter;
    private Button cargar;

    public static MovieListFragment newInstance() {
        return new MovieListFragment();
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        View view= inflater.inflate(R.layout.movie_list_fragment, container, false);
        recyclerView = (RecyclerView)view.findViewById(R.id.recycler_view);
        cargar = view.findViewById(R.id.btnCargar);
        mAdapter = new MoviesAdapter(movieList);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getContext());
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(mAdapter);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        cargar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mViewModel = ViewModelProviders.of(MovieListFragment.this).get(MovieListViewModel.class);
                mViewModel.init();
                mViewModel.getMovies().observe(MovieListFragment.this, new Observer<MovieModel>() {
                    @Override
                    public void onChanged(@Nullable MovieModel movieModels) {
                        movieList.addAll(movieModels.getData());
                        mAdapter.notifyDataSetChanged();
                    }
                });
            }
        });
        }

}

это ViewModel:

public class MovieModel {


    @SerializedName("data")
    List<DataModel> data;

    public List<DataModel> getData() {
        return data;
    }
    public void setData(List<DataModel> data) {
        this.data = data;
    }

    public class DataModel {
        @SerializedName("name")
        String name;

        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
}

это адаптер:

public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MyViewHolder> {

    private List<MovieModel.DataModel> moviesList;

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView name;

        public MyViewHolder(View view) {
            super(view);
            name = (TextView) view.findViewById(R.id.name);
        }
    }

    public MoviesAdapter(List<MovieModel.DataModel> moviesList) {
        this.moviesList = moviesList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.movie_list_row, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        MovieModel.DataModel movie = moviesList.get(position);
        holder.name.setText(movie.getName());
    }

    @Override
    public int getItemCount() {
        return moviesList.size();
    }
}

1 Ответ

1 голос
/ 11 февраля 2020

Когда вы поворачиваете свой телефон, действие уничтожается и воссоздается, поэтому вы видите, что ваши данные исчезают.

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

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    mViewModel = ViewModelProviders.of(MovieListFragment.this).get(MovieListViewModel.class);
    mViewModel.getMovies().observe(MovieListFragment.this, new Observer<MovieModel>() {
        @Override
        public void onChanged(@Nullable MovieModel movieModels) {
            movieList.addAll(movieModels.getData());
            mAdapter.notifyDataSetChanged();
        }
    });

    cargar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mViewModel.init();
        }
    });
}
...