2015-07-29 5 views
0

Я не могу понять, почему мой ImageView не заполняется в GridView, к которому прикреплен класс Custom ArrayAdapter.Изображения, не отображающиеся в GridView

Я пытался заполнить изображения на основе вызова AsyncTask, но я решил просто попробовать жесткое кодирование, которое можно извлечь в ImageView в используемом макете, и оно все еще ничего не показывает.

Есть ли что-то, что выделяется моей реализацией?

Я не получаю никаких ошибок, и одна вещь, которую я заметил, - это когда я пытаюсь отлаживать ее, она не попадает в мою точку останова в getView().

ADAPTER КЛАСС

public class MovieAdapter extends ArrayAdapter<Movie> { 

    private LayoutInflater mInflater; 

    public MovieAdapter(Context context, List<Movie> movies) { 
     super(context, 0, movies); 
     mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder vh; 
     Movie movie = getItem(position); 
     if(convertView == null){ 
      convertView = mInflater.inflate(R.layout.movie_item, parent, false); 
      vh = new ViewHolder(); 
      vh.ivPoster = (ImageView) convertView.findViewById(R.id.ivMoviePoster); 
      convertView.setTag(vh); 
     } else { 
      vh = (ViewHolder) convertView.getTag(); 
     } 

     vh.ivPoster.setImageDrawable(getContext().getResources().getDrawable(R.drawable.ant_man)); 

     //Picasso.with(getContext()).load(movie.getFull_poster_path()).into(vh.ivPoster); 
     return convertView; 
    } 

    @Override 
    public int getCount() { 
     return super.getCount(); 
    } 

    @Override 
    public int getPosition(Movie item) { 
     return super.getPosition(item); 
    } 

    private class ViewHolder { 
     private ImageView ivPoster; 

    } 
} 

РАСПОЛ

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" android:orientation="vertical"> 

    <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ant_man" 
      android:id="@+id/ivMoviePoster"/> 
</LinearLayout> 

РЕАЛИЗАЦИЯ

public class MainActivity extends ActionBarActivity { 

    private Spinner spinnerMovieSelection; 
    private GridView gridViewMovie; 
    private MovieAdapter movieAdapter; 
    SortByAdapter sortByAdapter; 
    private List<Movie> finalMovieList; 
    private ImageView ivPoweredBy; 
    private ArrayList<String> sortByList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     init(); 
    } 

    private void init() { 
     finalMovieList = new ArrayList<Movie>(); 
     sortByList = new ArrayList<String>(); 
     populateSortByList(); 

     gridViewMovie = (GridView) findViewById(R.id.gridViewMovie); 
     spinnerMovieSelection = (Spinner) findViewById(R.id.spinnerMovieSelection); 
     ivPoweredBy = (ImageView) findViewById(R.id.ivPoweredBy); 


     sortByAdapter = new SortByAdapter(getApplicationContext(), sortByList); 
     movieAdapter = new MovieAdapter(getApplicationContext(), finalMovieList); 
     spinnerMovieSelection.setAdapter(sortByAdapter); 
     gridViewMovie.setAdapter(movieAdapter); 

     spinnerMovieSelection.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       getMovies((String) parent.getItemAtPosition(position)); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     }); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    private void populateSortByList() { 
     sortByList.add("Popularity"); 
     sortByList.add("Highest Rated"); 
    } 

    private void getMovies(String sortBy) { 
     Log.e("RANDOM TAG", "GET MOVIES CALLED"); 
     MovieAsyncTask movieAsyncTask = new MovieAsyncTask() { 
      @Override 
      public void onResponseReceived(List<Movie> movieList) { 
       finalMovieList = movieList; 
       movieAdapter.notifyDataSetChanged(); 
      } 
     }; 
     movieAsyncTask.execute(sortBy); 
    } 
} 
+0

Я верю, что вы устанавливаете адаптер в gridview перед добавлением значений? В идеале вы должны добавить адаптер onResponse recvd – Dhina

+0

Будет ли это? Даже если я звоню notifyDatasetChanged()? –

ответ

1

Дело здесь е e в вашем видеоадаптере всегда пуст.
Вы инициируете адаптер видео с пустым списком.
Тогда в onResponseReceived в getMovies, вы назначаете finalMovieList = movieList; затем notifyDatasetChanged, Но адаптер еще пусты, потому что finalMoviewList точка к другому Обратятся теперь
Попробуйте это:

finalMovieList.clear(); 
if (movieList != null) { 
    finalMovieList.addAll(movieList); 
} 
movieAdapter.notifyDataSetChanged(); 

Надеется, что это помогает.