Загрузите все данные, присутствующие в списке, используя RecyclerView Android - PullRequest
0 голосов
/ 23 февраля 2019

Я использую RecyclerView для отображения данных, представленных в list.Но RecyclerView загружает только те строки данных, которые видны пользователю.

Поскольку у моего list есть только 10-12 элементов, и я хочу загрузить их все сразу.Как бороться с этим, используя RecyclerView?

RecyclerViewFragment.java

public class RecyclerViewFragment extends Fragment {
List<Movie> movieList = new ArrayList<>();

RecyclerView myRecyclerView;
MyMovieAdapter myMovieAdapter;

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

    View view = inflater.inflate(R.layout.reccycler_view_frament,container,false);

    Movie movie = new Movie("ABC","1-1-1");
    movieList.add(movie);
    movie = new Movie("PLK","4-4-4");
    movieList.add(movie);
    movie = new Movie("XYZ","2-2-2");
    movieList.add(movie);
    movie = new Movie("ZMMD","3-3-3");
    movieList.add(movie);
    movie = new Movie("ABC","1-1-1");
    movieList.add(movie);
    movie = new Movie("PLK","4-4-4");
    movieList.add(movie);
    movie = new Movie("XYZ","2-2-2");
    movieList.add(movie);
    movie = new Movie("ZMMD","3-3-3");
    movieList.add(movie);
    movie = new Movie("ABC","1-1-1");
    movieList.add(movie);
    movie = new Movie("PLK","4-4-4");
    movieList.add(movie);
    movie = new Movie("XYZ","2-2-2");
    movieList.add(movie);
    movie = new Movie("ZMMD","3-3-3");
    movieList.add(movie);
    movie = new Movie("ABC","1-1-1");
    movieList.add(movie);
    movie = new Movie("PLK","4-4-4");
    movieList.add(movie);
    movie = new Movie("XYZ","2-2-2");
    movieList.add(movie);
    movie = new Movie("ZMMD","3-3-3");
    movieList.add(movie);
    movie = new Movie("ABC","1-1-1");
    movieList.add(movie);
    movie = new Movie("PLK","4-4-4");
    movieList.add(movie);
    movie = new Movie("XYZ","2-2-2");
    movieList.add(movie);
    movie = new Movie("ZMMD","3-3-3");
    movieList.add(movie);
    movie = new Movie("ABC","1-1-1");
    movieList.add(movie);
    movie = new Movie("PLK","4-4-4");
    movieList.add(movie);
    movie = new Movie("XYZ","2-2-2");
    movieList.add(movie);
    movie = new Movie("ZMMD","3-3-3");
    movieList.add(movie);
    movie = new Movie("ABC","1-1-1");
    movieList.add(movie);
    movie = new Movie("PLK","4-4-4");
    movieList.add(movie);
    movie = new Movie("XYZ","2-2-2");
    movieList.add(movie);
    movie = new Movie("ZMMD","3-3-3");
    movieList.add(movie);


    myRecyclerView = view.findViewById(R.id.recyclerView);
    myMovieAdapter = new MyMovieAdapter(movieList);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
    myRecyclerView.setLayoutManager(layoutManager);
    myRecyclerView.setItemAnimator(new DefaultItemAnimator());
    myRecyclerView.setAdapter(myMovieAdapter);

    return view;
  }
}

MyMovieAdapter.java

public class MyMovieAdapter extends RecyclerView.Adapter<MyMovieAdapter.MyMoviewHolder> {

List<Movie> movieList;

public MyMovieAdapter(List<Movie> movieList){
    this.movieList = movieList;
}

@NonNull
@Override
public MyMoviewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

    View view = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.movie_adapter,viewGroup,false);
    return new MyMoviewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull MyMoviewHolder myMoviewHolder, int i) {

    Log.d("MOVIETEST","NAME = "+movieList.get(i).getMovieName());
    myMoviewHolder.movieNameTV.setText(movieList.get(i).getMovieName());
    myMoviewHolder.movieReleaseDateTV.setText(movieList.get(i).getReleaseDate());
}

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

public class MyMoviewHolder extends RecyclerView.ViewHolder{

    AppCompatTextView movieNameTV, movieReleaseDateTV;

    public MyMoviewHolder(@NonNull View itemView) {
        super(itemView);
        movieNameTV = itemView.findViewById(R.id.name);
        movieReleaseDateTV = itemView.findViewById(R.id.release_date);
    }
}

}

Movie.java

public class Movie {

private String movieName;
private String releaseDate;

public Movie(String movieName, String releaseDate){
    this.movieName = movieName;
    this.releaseDate = releaseDate;
}
public String getMovieName() {
    return movieName;
}

public void setMovieName(String movieName) {
    this.movieName = movieName;
}

public String getReleaseDate() {
    return releaseDate;
}

public void setReleaseDate(String releaseDate) {
    this.releaseDate = releaseDate;
}

}

movie_adapter.xml

<android.support.v7.widget.CardView
android:elevation="3dp"
android:background="#9372"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="50dp"
xmlns:android="http://schemas.android.com/apk/res/android">

    <LinearLayout
        android:weightSum="10"
        android:layout_gravity="center_vertical"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.AppCompatTextView
            android:layout_width="0dp"
            android:layout_weight="5"
            android:layout_height="wrap_content"
            android:id="@+id/name"
            android:gravity="center_horizontal"
            android:layout_gravity="center_horizontal"
            android:text="ABC"
            />
        <android.support.v7.widget.AppCompatTextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:id="@+id/release_date"
            android:layout_weight="5"
            android:gravity="center_horizontal"
            android:layout_gravity="center_horizontal"
            android:text="1-1-1"
            />

    </LinearLayout>

</android.support.v7.widget.CardView>

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Вся идея recyclerView заключается в том, чтобы загрузить то, что видимо пользователю, если вы хотите отобразить 10-12 элементов и загрузить их все сразу, вы можете использовать listView (его предок RecyclerView, кстати).

Другой вариант , который вы можете использовать - вы можете использовать макет прокрутки и динамически добавлять свои элементы в макет или объявлять их в макете до выполнения (я предлагаю использовать макет прокрутки, потому что разные телефоны имеют разныеРазмер экрана, и без макета прокрутки вы можете обнаружить, что на некоторых устройствах виды просто не могут поместиться на экране, и они не будут отображаться на нем).

А если вы этого не сделаетевы хотите использовать макет прокрутки - вы всегда можете использовать макет ограничения - но тогда, если вы хотите показать 10-12 элементов на 1 экране, обратите внимание, что у вас не будет большого размера экрана для каждого элемента (ваш макет можетвыглядит очень сжато и не интуитивно для пользователя)

0 голосов
/ 23 февраля 2019

Пожалуйста, обновите код с этим единственным незначительным изменением, которое я сделал, было изменение высоты с 50 dp до wrap_content

    <android.support.v7.widget.CardView
    android:elevation="3dp"
    android:background="#9372"
    android:layout_marginTop="10dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android">

        <LinearLayout
            android:weightSum="10"
            android:layout_gravity="center_vertical"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.v7.widget.AppCompatTextView
                android:layout_width="0dp"
                android:weight="5"
                android:layout_height="wrap_content"
                android:id="@+id/name"
                android:gravity="center_horizontal"
                android:layout_gravity="center_horizontal"
                android:text="ABC"
                />
            <android.support.v7.widget.AppCompatTextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:id="@+id/release_date"
android:weight="5"

                android:gravity="center_horizontal"
                android:layout_gravity="center_horizontal"
                android:text="1-1-1"
                />

        </LinearLayout>

    </android.support.v7.widget.CardView>

update your card View
...