Какую форму установить адаптер RecyclerView лучше? - PullRequest
0 голосов
/ 03 июня 2019

У меня есть сомнения по поводу настройки адаптера RecyclerView, я видел в некоторых руководствах, что они делают адаптер, а затем они делают в том же классе, что и RecyclerView, для которого они устанавливают информацию.Но мой учитель делает это по-другому, он делает 4 класса, адаптер, затем этот класс, чтобы получить всю информацию, которая называется MovieServices:

public class MoviesService
{
public static MoviesService moviesService;

public static MoviesService getInstance()
{
    if ( moviesService == null )
    {
        moviesService = new MoviesService();
    }

    return moviesService;
}

private List<Movie> movies;

private MoviesService()
{
    this.movies = new ArrayList<>();

    movies.add( new Movie("001", "El hombre que mató a Liberty Valance", 9.8) );
    movies.add( new Movie("002", "Río Rojo", 9.2) );
    movies.add( new Movie("003", "Río Bravo", 9.9) );
    movies.add( new Movie("004", "La diligencia", 9.1) );
    movies.add( new Movie("005", "Que verde era mi valle", 9.8) );
    movies.add( new Movie("006", "El hombre tranquilo", 9.3) );
    movies.add( new Movie("007", "Misión de audaces", 9) );
    movies.add( new Movie("008", "La taberna del irlandés", 8.6) );
    movies.add( new Movie("009", "El Padrino", 9.5) );
    movies.add( new Movie("010", "El Padrino II", 9.6) );
    movies.add( new Movie("011", "El Padrino III", 9.7) );
    movies.add( new Movie("012", "Los increibles", 9.2) );
    movies.add( new Movie("013", "Los increibles II", 8.9) );
    movies.add( new Movie("014", "Coco", 9.6) );
}

public List<Movie> getMovies()
{
    return movies;
}

public Movie getMovie(int position)
{
    return movies.get( position );
}


public void update(int moviePosition, Movie movie)
{
    movies.set(moviePosition, movie);
}
}

Затем он вызвал другой класс с именем

public class MainViewModel extends ViewModel
{
private MoviesService moviesService;


public MainViewModel()
{
    moviesService = MoviesService.getInstance();
}

public List<Movie> getMovies()
{
    return moviesService.getMovies();
}

public Movie getMovie(int position)
{
    return moviesService.getMovie( position );
}
}

И, наконец, класс, у которого есть RecyclerView:

public class MainActivity extends AppCompatActivity implements MovieAdapter.OnItemClickListener
{

private MainViewModel viewModel;
private RecyclerView rv;
private RecyclerView.LayoutManager layoutManager;
private MovieAdapter adapter;


@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    this.viewModel = ViewModelProviders.of(this).get(MainViewModel.class);
    this.rv = findViewById(R.id.rv);
    this.layoutManager = new LinearLayoutManager(this, RecyclerView.VERTICAL, false);
    this.adapter = new MovieAdapter(this);
    this.adapter.setOnItemClickListener(this);

    rv.setAdapter( adapter );
    rv.setLayoutManager( layoutManager );
    adapter.setMovies( viewModel.getMovies() );
}

@Override
public void onItemClick(View view, int position) {

    Movie movie = this.viewModel.getMovie(position);
    Toast.makeText(this, movie.getName(), Toast.LENGTH_SHORT).show();

    Intent intent = new Intent(this, MovieActivity.class );
    intent.putExtra(MovieActivity.EXTRA_MOVIE_POSITION, position);
    startActivityForResult( intent, 88 );
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    switch ( requestCode )
    {
        case 88:  if ( resultCode == Activity.RESULT_OK)
                  {
                      adapter.setMovies( viewModel.getMovies() );
                  }
                  break;
    }
}
}

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

1 Ответ

0 голосов
/ 03 июня 2019

лучший подход - создать отдельный элемент, выполнив следующие шаги для чистого кодирования:

1 - Создать отдельный класс пользовательских объектов

2 - Создайте отдельный RecyclerView.Adapter для заполнения данных в RecyclerView

3- Привязать адаптер к RecyclerView в отдельном занятии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...