изображение в виде пейджера, например, Button избранное - PullRequest
0 голосов
/ 10 апреля 2020

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)

1 Ответ

0 голосов
/ 10 апреля 2020

В SimpleFragment

В этой строке

String gonderiId= String.valueOf(movieList.get(position).getGonderiId());

ваш movieList равен нулю. В нем нет ценностей. Вот почему вы получаете эту ошибку.

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