Android: Предел списка чтения в Firebase Viewpager - PullRequest
0 голосов
/ 12 апреля 2020

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

SimpleFragment


public class SimpleFragment extends Fragment implements IFirebaseLoadDone, ValueEventListener {
    private ViewPager viewPager;
    private MyAdapter adapter;
    private DatabaseReference movies;
    private IFirebaseLoadDone iFirebaseLoadDone;

    private ContentLoadingProgressBar progressBar;
    private OutputStream outputStream;
    List<Movie> movieList = new ArrayList<>();


    public SimpleFragment() {
        // Required empty public constructor
    }


    @SuppressLint("ClickableViewAccessibility")
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_simple, container, false);

        movies = FirebaseDatabase.getInstance().getReference("Sports");

        iFirebaseLoadDone = this;
        checkConnection(view);
        loadMovie();
        viewPager = (ViewPager) view.findViewById(R.id.vivi_pager);

        progressBar = view.findViewById(R.id.progressBar);

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        final ConstraintLayout relativeLayout = view.findViewById(R.id.scoordinatorLayout);
        viewPager.setOnTouchListener(new View.OnTouchListener() {
            private float pointX;
            private float pointY;
            private int tolerance = 50;

            @SuppressLint("ClickableViewAccessibility")
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_MOVE:
                        return false; //This is important, if you return TRUE the action of swipe will not take place.
                    case MotionEvent.ACTION_DOWN:
                        pointX = event.getX();
                        pointY = event.getY();
                        break;
                    case MotionEvent.ACTION_UP:
                        boolean sameX = pointX + tolerance > event.getX() && pointX - tolerance < event.getX();
                        boolean sameY = pointY + tolerance > event.getY() && pointY - tolerance < event.getY();
                        if (sameX && sameY) {


                            if (relativeLayout.getVisibility() == View.VISIBLE) {
                                relativeLayout.setVisibility(View.GONE);
                            } else {
                                relativeLayout.setVisibility(View.VISIBLE);

                            }
                        }
                }
                return false;
            }
        });



        return view;
    }


    private void loadMovie() {

movies.addValueEventListener(this);
    }

    @Override
    public void onFirebaseLoadSuccess(List<Movie> movieList) {
        adapter = new MyAdapter(getContext(), movieList);
        viewPager.setAdapter(adapter);

    }

    @Override
    public void onFirebasLoadFailed(String message) {
        Toast.makeText(getContext(), "" + message, Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        for (DataSnapshot moviesSnapShot : dataSnapshot.getChildren())
            movieList.add(moviesSnapShot.getValue(Movie.class));

        iFirebaseLoadDone.onFirebaseLoadSuccess(movieList);

        adapter.notifyDataSetChanged();
        errorPlaceholder.setVisibility(View.GONE);
        progressBar.setVisibility(View.GONE);


    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        iFirebaseLoadDone.onFirebasLoadFailed(databaseError.getMessage());
    }

    @Override
    public void onDestroy() {
        movies.removeEventListener(this);
        super.onDestroy();
    }

    @Override
    public void onResume() {
        super.onResume();
        //Kapalı olması gerek
        //movies.addValueEventListener(this);
    }

    @Override
    public void onStop() {
        movies.removeEventListener(this);
        super.onStop();
    }
}

фрагмент_простой. xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".Fragment.SimpleFragment">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/vivi_pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        tools:ignore="MissingConstraints" />


    <androidx.core.widget.ContentLoadingProgressBar
        android:id="@+id/progressBar"
        style="@style/Widget.AppCompat.ProgressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />




</androidx.constraintlayout.widget.ConstraintLayout>

MyAdapter. java

public class MyAdapter extends PagerAdapter {
    Context context;
    List<Movie> movieList;
    LayoutInflater inflater;
    OutputStream outputStream;
    public MyAdapter(Context context, List<Movie> movieList) {
        this.context = context;
        this.movieList = movieList;
        inflater = LayoutInflater.from(context);
    }

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

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        ((ViewPager)container).removeView((View)object);
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull final ViewGroup container, final int position) {
        final View view = inflater.inflate(R.layout.items,container,false);
        final ImageView movie_image = (ImageView)view.findViewById(R.id.movie_image);
        Picasso.get()
                .load(movieList.get(position).getImage())
                .fit()
                .centerCrop()
                .into(movie_image);

        container.addView(view);

        return view;
    }
}



...