hello viewpager У меня также есть любимая кнопка, я хочу, чтобы она появлялась мгновенно при нажатии на нее. Я только получаю ошибку. Я получаю сообщение об ошибке при вызове метода fav ().
Нажмите на кнопку открытой страницы, чтобы она работала аналогично. Все работает, кроме метода
int position = viewPager.getCurrentItem();
String gonderiId= String.valueOf(movieList.get(position).getGonderiId());
fav(gonderiId,btn_fav);
SimpleFragment
public class SimpleFragment extends Fragment implements IFirebaseLoadDone, ValueEventListener {
private ViewPager viewPager;
private MyAdapter adapter;
private DatabaseReference movies;
private IFirebaseLoadDone iFirebaseLoadDone;
private ImageButton btn_fav;
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;
loadMovie();
viewPager = (ViewPager) view.findViewById(R.id.vivi_pager);
btn_fav = view.findViewById(R.id.btn_fav);
int position = viewPager.getCurrentItem();
String gonderiId= String.valueOf(movieList.get(position).getGonderiId());
fav(gonderiId,btn_fav);
btn_fav.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = viewPager.getCurrentItem();
String imagePath = String.valueOf(movieList.get(position).getGonderiId());
if (btn_fav.getTag().equals("dislike")) {
final FirebaseUser mevcutKullanici = FirebaseAuth.getInstance().getCurrentUser();
FirebaseDatabase.getInstance().getReference().child("Favorites").child(imagePath)
.child(mevcutKullanici.getUid()).setValue(true);
Toast.makeText(getContext(), "favorite add", Toast.LENGTH_SHORT).show();
} else {
final FirebaseUser mevcutKullanici = FirebaseAuth.getInstance().getCurrentUser();
FirebaseDatabase.getInstance().getReference().child("Favorites").child(imagePath)
.child(mevcutKullanici.getUid()).removeValue();
Toast.makeText(getContext(), "favorite remove", Toast.LENGTH_SHORT).show();
}
}
});
return view;
}
private void fav(String gonderiId, final ImageButton imageButton) {
final FirebaseUser mevcutKullanici = FirebaseAuth.getInstance().getCurrentUser();
final DatabaseReference begeniVeriTabaniYolu = FirebaseDatabase.getInstance().getReference()
.child("Favorites")
.child(gonderiId);
begeniVeriTabaniYolu.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.child(mevcutKullanici.getUid()).exists()) {
imageButton.setImageResource(R.drawable.ic_like);
imageButton.setTag("like");
} else {
imageButton.setImageResource(R.drawable.ic_dislike);
imageButton.setTag("dislike");
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
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);
}
@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();
}
@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.constraintlayout.widget.ConstraintLayout
android:id="@+id/coordinatorLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
tools:ignore="MissingConstraints">
<ImageButton
android:id="@+id/btn_fav"
style="@style/Button.Small"
android:layout_width="@dimen/show_options_button_width"
android:layout_height="@dimen/show_options_button_height"
android:layout_marginStart="20dp"
android:layout_marginBottom="@dimen/show_options_button_margin_large"
android:contentDescription="@string/set_wallpaper"
android:gravity="center"
android:src="@drawable/ic_dislike"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</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;
}
}
СТРАНИЦА ОШИБКИ
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.duvarlar, PID: 15851
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:437)
at com.example.duvarlar.Fragment.SimpleFragment.onCreateView(SimpleFragment.java:92)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)