2016-05-19 5 views
0

Я получаю данные от API TMDB и отображаю его на экране.RecyclerView не отображается в UI

Прямо сейчас, я пытаюсь получить отзывы от этого API.

Все кажется прекрасным, я создал: адаптер, модель, интерфейс, xml и действия, но он не отображает никаких данных.

API работает нормально, я вижу из монитора Android, что получаю правильные данные.

Помогите, пожалуйста.

пыльник мой DetailsActivity где я пытаюсь получить данные:

public class MovieDetailActivity extends AppCompatActivity { 
public static final String EXTRA_MOVIE = "EXTRA_MOVIE"; 
private Movie mMovie; 
private Reviews mReviews; 
private Genres mGenres; 
public ReviewAdapter rAdapter; 

ImageView backdrop; 
ImageView poster; 
TextView title; 
TextView description; 
TextView releaseDate; 
TextView voteAverage; 
RecyclerView reviews; 
TextView content; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_movie_detail); 
    if (getIntent().hasExtra(EXTRA_MOVIE)) { 
     mMovie = getIntent().getParcelableExtra(EXTRA_MOVIE); 
    } else { 
     throw new IllegalArgumentException("Detail activity must receive a movie parcelable"); 
    } 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    CollapsingToolbarLayout toolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout); 
    toolbarLayout.setTitle(mMovie.getTitle()); 


    reviews = (RecyclerView) findViewById(R.id.recyclerView2); 
    reviews.setLayoutManager(new LinearLayoutManager(this)); 
    rAdapter = new ReviewAdapter(MovieDetailActivity.this); 

    reviews.setAdapter(rAdapter); 


    getReviews(mMovie.getId()); 




    poster = (ImageView) findViewById(R.id.movie_poster); 
    String internetUrl = "http://image.tmdb.org/t/p/w500"; 

    Glide.with(this) 
      .load(mMovie.getPoster()) 
      .into(poster); 

    Glide.with(this) 
      .load(mMovie.getBackdrop()) 
      .into(backdrop); 
} 


private void getReviews(Integer id) { 
    RestAdapter.getMovieService().getReviews(id, new Callback<ReviewWraper>() { 
     @Override 
     public void success(ReviewWraper reviewWraper, Response response) { 
      rAdapter.setReviewList(reviewWraper.getResults()); 
     } 

     @Override 
     public void failure(RetrofitError error) { 
      error.printStackTrace(); 

     } 
    }); 
} 

public static class MovieViewHolder extends RecyclerView.ViewHolder { 

    public ImageView reviewPicture; 
    public TextView reviewUsername; 
    public TextView reviewDate; 
    public TextView reviewTime; 
    public TextView reviewComment; 


    public MovieViewHolder(View itemView) { 
     super(itemView); 

     reviewPicture = (ImageView) itemView.findViewById(R.id.picture_review); 
     reviewUsername = (TextView) itemView.findViewById(R.id.username_review); 
     reviewDate = (TextView) itemView.findViewById(R.id.date_review); 
     reviewTime = (TextView) itemView.findViewById(R.id.time_review); 
     reviewComment = (TextView) itemView.findViewById(R.id.review_comment); 



    } 
} 

Вот мой адаптер класс:

public class ReviewAdapter extends RecyclerView.Adapter<MovieDetailActivity.MovieViewHolder> { 

private List<Reviews> rReviewList; 
private LayoutInflater rInflater; 
private Context rContext; 

public ReviewAdapter(Context context) { 
    this.rContext = context; 
    this.rInflater = LayoutInflater.from(context); 
    this.rReviewList = new ArrayList<>(); 
} 


public MovieDetailActivity.MovieViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) { 
    // create a new view 
    View view = rInflater.inflate(R.layout.row_review, parent, false); 
    return new MovieDetailActivity.MovieViewHolder(view); 
} 

@Override 
public void onBindViewHolder(MovieDetailActivity.MovieViewHolder holder, int position) { 
    Reviews reviews = rReviewList.get(position); 
    Picasso.with(rContext) 
      .load(reviews.getUrl()) 
      .into(holder.reviewPicture); 
    holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //Perform click 
     } 
    }); 
} 


@Override 
public int getItemCount() { 
    return rReviewList.size(); 
} 

//To update data 
public void setReviewList(List<Reviews> reviewsList) { 
    this.rReviewList = new ArrayList<>(); 
    this.rReviewList.addAll(reviewsList); 
    notifyDataSetChanged(); 
} 

Беллоу XML 1:

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



    <ImageView 
     android:id="@+id/picture_review" 
     android:layout_width="50dp" 
     android:layout_height="50dp" /> 

    <TextView 
     android:adjustViewBounds="true" 
     android:id="@+id/username_review" 
     android:layout_width="40dp" 
     android:layout_height="20dp" 
     android:width="20dp" 
     android:height="20dp" 
     android:textColor="#ffffff" /> 

    <TextView 
     android:id="@+id/date_review" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:textColor="#ffffff" /> 

    <TextView 
     android:id="@+id/time_review" 
     android:layout_width="10dp" 
     android:layout_height="10dp" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:textColor="#ffffff" /> 

    <TextView 
     android:id="@+id/review_comment" 
     android:layout_width="250dp" 
     android:layout_height="250dp" 
     android:textColor="#ffffff" 
     android:layout_centerVertical="true" 
     android:layout_toRightOf="@+id/picture_review" 
     android:layout_toEndOf="@+id/picture_review" /> 

</RelativeLayout> 

И XML 2 с RecyclerView

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.NestedScrollView 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="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.demo.mtin.mtin.MovieDetailActivity" 
    tools:showIn="@layout/activity_movie_detail"> 

       <android.support.v7.widget.RecyclerView 

        android:id="@+id/recyclerView2" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:textColor="#ffffff" /> 
+0

@Meet У вас есть идеи? спасибо –

+0

Не уверен, что это ваша проблема, но вам не понадобится RecyclerView внутри ScrollView любого типа. – zgc7009

+0

@ zgc7009 Это не проблема, но спасибо :) –

ответ

0

Try, чтобы дать фиксированную высоту вместо "wrap_content" на вашей строке в корне Xml 1.

+0

Не помогает, но спасибо –

0
tools:showIn="@layout/activity_movie_detail"> 

Если XML-2 нужно показать в XML 1, XML1 должны иметь это -

<include layout="@layout/XML2"/> 

Для получения более подробной информации - android-how-to-use-tools-with-include-layout

+0

Это сбой моего приложения, когда я добавляю include внутри activity_movie_detail –

Смежные вопросы