2016-10-31 5 views
-3

Ich versuche, meine Recycleransicht mit den Daten zu aktualisieren, die ich von MOVIE db API erhalte. Verwende ASYNC Task, um die Anfrage zu machen und das Ergebnis vom Server zu bekommen, aber in der onPostExecute() wenn ich versuche, den Adapter zu löschen und die neuen Daten dem Adapter hinzuzufügen, zeigt es eine "kann Methode nicht auflösen 'clear()' "kann Methode "clear()" in Recyclerview nicht auflösen

MAINACTIVITY

public class MainActivity extends AppCompatActivity { 

    final static QueryUtils queryUtils = new QueryUtils(); 
    final static String URL = "http://api.themoviedb.org/3/movie/popular? api_key="; 
    static String[] finalData = new  String[queryUtils.getLengthOfJsonArray(URL)]; 
    public RecyclerView mRecyclerView; 
    public RecyclerView.Adapter mAdapter; 
    private RecyclerView.LayoutManager mLayoutManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mRecyclerView = (RecyclerView) findViewById(R.id.recylerView); 
     //using the grid layout manager 
     mLayoutManager = new GridLayoutManager(getApplicationContext(), 2); 
     mRecyclerView.setLayoutManager(mLayoutManager); 
     //setting the adpater. 
     mAdapter = new MovieAdapter(finalData, this); 
     mRecyclerView.setAdapter(mAdapter); 
     MovieTask task =new MovieTask(); 
     task.execute(URL);  
    } 

    private class MovieTask extends AsyncTask<String, Void, String[]> { 

     @Override 
     protected String[] doInBackground(String... params) { 
      String[] data = queryUtils.fetchMovieData(URL); 
      return data; 
     } 

     @Override 
     protected void onPostExecute(String[] data) { 
      mAdapter.clear(); 
     } 
    } 
} 

MOVIE-ADAPTER acitivity

public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.ViewHolder>{ 

    private String[] adumyString; 
    private int[] adumyimage; 
    private Context context; 

    //Constructor for Movie Adapter 
    public MovieAdapter(String[] dummyDataSet,Context context) { 
     this.context=context; 
     adumyString=dummyDataSet; 
    } 

    // Provide a direct reference to each of the views within a data item 
    // Used to cache the views within the item layout for fast access 
    public static class ViewHolder extends RecyclerView.ViewHolder { 
     // Your holder should contain a member variable 
     // for any view that will be set as you render a row 
     public ImageView colorImageView; 

     // We also create a constructor that accepts the entire item row. 
     // and does the view lookups to find each subview 
     public ViewHolder(View itemView) { 
      // Stores the itemView in a public final member variable that can be used 
      // to access the context from any ViewHolder instance. 
      super(itemView); 
      colorImageView = (ImageView) itemView.findViewById(R.id.movieImage); 
     } 
    } 
    /** 
    * Binds the data into 
    */ 
    @Override 
    public void onBindViewHolder(MovieAdapter.ViewHolder holder, int position) { 
     Picasso.with(context).load(adumyString[position]).into(holder.colorImageView); 
    } 

    @Override 
    public int getItemCount() { 
     return adumyString.length; 
    } 

    /** 
    * Inflates the out custom view on to the screen. 
    */ 
    @Override 
    public MovieAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_view,parent,false); 
     return new ViewHolder(v); 
    } 
} 
+2

RecyclerView.Adapter haben keine Methode 'clear()'. Sie müssen es vor der Verwendung implementieren –

Antwort

0

RecyclerView.Adapter abstrakte Klasse bietet keine clear oder add Methode. Siehe Dokumentation für die Klasse here.

Sie müssen diese Methoden in Ihrer MovieAdapter Klasse deklarieren und implementieren und Ihre mAdapter Variable als MovieAdapter mAdapter; deklarieren.

0

können Sie adapter.notifydatasetchanged() in Ihrer onPostExecute() Methode verwenden.

ps: Sorry für das Schreiben Kommentar hier, niedrige rep :)

Verwandte Themen