2017-09-27 3 views
-4

Voici mon code où j'ai erreur dansImpossible d'utiliser Piccaso dans Fragments

Picasso.with(ThreeFragement.this).load(model.getMoviePoster()).into(viewHolder.ivMoviePoster); 

même si je ThreeFragment à la mise en getContext, il ne fonctionne pas.

L'ensemble du code est écrit ci-dessous où je veux implémenter Picasso à Firebase RecyclerView dans un Fragment et récupérer des images par-dessus.

Ceci était juste un tutoriel implémenté sur un Activity que j'ai essayé de mettre en Fragment.

package com.tabs.ayushmaniac.letsmanageit; 

import android.content.Context; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.StaggeredGridLayoutManager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.animation.Animation; 
import android.view.animation.ScaleAnimation; 
import android.widget.ImageView; 
import android.widget.RatingBar; 
import android.widget.TextView; 

import com.tabs.ayushmaniac.letsmanageit.fragment.AddMovieFragment; 
import com.tabs.ayushmaniac.letsmanageit.models.Movie; 
import com.firebase.ui.database.FirebaseRecyclerAdapter; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.squareup.picasso.Picasso; 

public class ThreeFragment extends Fragment { 

    private FloatingActionButton fab; 

    ScaleAnimation shrinkAnim; 
    private RecyclerView mRecyclerView; 
    private StaggeredGridLayoutManager mLayoutManager; 
    private TextView tvNoMovies; 

    //Getting reference to Firebase Database 
    FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference mDatabaseReference = database.getReference(); 

    private static final String USER_ID = "53"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_three, container, false); 
     return rootView; 

     //Initializing our Recyclerview 
     mRecyclerView = (RecyclerView)getView().findViewById(R.id.my_recycler_view); 
     tvNoMovies = (TextView)getView().findViewById(R.id.tv_no_movies); 

     //scale animation to shrink floating actionbar 
     shrinkAnim = new ScaleAnimation(1.15f, 0f, 1.15f, 0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 

     if (mRecyclerView != null) { 
      //to enable optimization of recyclerview 
      mRecyclerView.setHasFixedSize(true); 
     } 
     //using staggered grid pattern in recyclerview 
     mLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); 
     mRecyclerView.setLayoutManager(mLayoutManager); 


     //Say Hello to our new Firebase UI Element, i.e., FirebaseRecyclerAdapter 
     final FirebaseRecyclerAdapter<Movie,MovieViewHolder> adapter = new FirebaseRecyclerAdapter<Movie, MovieViewHolder>(
       Movie.class, 
       R.layout.movie_board_item, 
       MovieViewHolder.class, 
       //referencing the node where we want the database to store the data from our Object 
       mDatabaseReference.child("users").child(USER_ID).child("movies").getRef() 
     ) { 
      @Override 
      protected void populateViewHolder(MovieViewHolder viewHolder, Movie model, int position) { 
       if(tvNoMovies.getVisibility()== View.VISIBLE){ 
        tvNoMovies.setVisibility(View.GONE); 
       } 
       viewHolder.tvMovieName.setText(model.getMovieName()); 
       viewHolder.ratingBar.setRating(model.getMovieRating()); 
       Picasso.with(this).load(model.getMoviePoster()).into(viewHolder.ivMoviePoster); 
      } 
     }; 

     mRecyclerView.setAdapter(adapter); 


     fab = (FloatingActionButton)getView().findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       getFragmentManager().beginTransaction() 
         .replace(R.id.frame_container, new AddMovieFragment()) 
         .addToBackStack(null) 
         .commit(); 
       //animation being used to make floating actionbar disappear 
       shrinkAnim.setDuration(400); 
       fab.setAnimation(shrinkAnim); 
       shrinkAnim.start(); 
       shrinkAnim.setAnimationListener(new Animation.AnimationListener() { 
        @Override 
        public void onAnimationStart(Animation animation) { 

        } 

        @Override 
        public void onAnimationEnd(Animation animation) { 
         //changing floating actionbar visibility to gone on animation end 
         fab.setVisibility(View.GONE); 
        } 

        @Override 
        public void onAnimationRepeat(Animation animation) { 


        } 
       }); 

      } 
     }); 

    } 




    public static class MovieViewHolder extends RecyclerView.ViewHolder{ 

     TextView tvMovieName; 
     RatingBar ratingBar; 
     ImageView ivMoviePoster; 

     public MovieViewHolder(View v) { 
      super(v); 
      tvMovieName = (TextView) v.findViewById(R.id.tv_name); 
      ratingBar = (RatingBar) v.findViewById(R.id.rating_bar); 
      ivMoviePoster = (ImageView) v.findViewById(R.id.iv_movie_poster); 
     } 
    } 



} 

Répondre

1

Utilisation getActivity() au lieu de ThreeFragement.this

Essayez ci-dessous le code;

Picasso.with(getActivity()).load(model.getMoviePoster()).into(viewHolder.ivMoviePoster); 
+0

œuvres ici, mais il ne laisse pas recylerview être une déclaration accessible. mRecyclerView = (RecyclerView) getView(). FindViewById (R.id.my_recycler_view); –

+0

@AyushShrivastava vous avez 'return rootView;' juste après 'View rootView = inflater.inflate (R.layout.fragment_three, conteneur, false);'. Vous devriez avoir la déclaration de retour à la fin de la méthode – Raghunandan

+0

Cher utilisation rootView intead de getView() –

1

essayer cette

Picasso.with(context).load(model.getMoviePoster()).into(viewHolder.ivMoviePoster); 

au lieu de

Picasso.with(ThreeFragement.this).load(model.getMoviePoster()).into(viewHolder.ivMoviePoster); 
+0

utiliser. .. rootview mRecyclerView = (RecyclerView) rootView.findViewById (R.id.my_recycler_view); –

0

Vous pouvez utiliser getActivity(), qui renvoie le activity associé à un fragment.

donc le code remplacer

Picasso.with(ThreeFragement.this).load(model.getMoviePoster()).into(viewHolder.ivMoviePoster); 

avec

Picasso.with(getActivity()).load(model.getMoviePoster()).into(viewHolder.ivMoviePoster);