Мой вопрос: когда я снимаю список огненной базы, я хочу стрелять ограниченным образом, поэтому я не хочу, чтобы он стрелял в них всех в биенде. Пример 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;
}
}