RecyclerView无法显示

Dar*_*usL 9 android android-recyclerview

我有一个不显示任何项目的RecyclerView.最初它是空的,但后来我添加了项目并调用notifyDatasetChanged().getItemCount()被调用并返回25,onBindViewHolder被调用3次并正确设置视图.

public AlbumListAdapter(FacebookActivity activity, long pageId, OnItemClickListener listener){
    this.listener = listener;
    this.inflater = LayoutInflater.from(activity);
    this.service = new PagedGraphService<Album>(String.format("https://graph.facebook.com/%d/albums", pageId),
            new PagedGraphService.ServiceUpdateListener() {
        @Override
        public void dataUpdated() {
            notifyDataSetChanged();
        }

        @Override
        public void endReached() {

        }
    },
    new TypeToken<PagedGraphService.GraphResponse<Album>>(){}.getType());
}

@Override
public AlbumHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    return new AlbumHolder(inflater.inflate(R.layout.photo_album_list_card, viewGroup, false));
}

@Override
public void onBindViewHolder(AlbumHolder viewHolder, int i) {
    viewHolder.setAlbum(service.get(i));
}

@Override
public int getItemCount() {
    return service.getLoadedCount();
}
Run Code Online (Sandbox Code Playgroud)

它的要点.该服务包含一个专辑列表,并通过调用dataUpdated()和endReached()通知适配器更改.

更多代码:

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    RecyclerView view = (RecyclerView) inflater.inflate(R.layout.recycler, container, false);
    view.setLayoutManager(new LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false));
    view.setHasFixedSize(false);
    AlbumListAdapter adapter = new AlbumListAdapter(activity, FacebookActivity.PSM_PAGE_ID, this);
    view.setAdapter(adapter);
    return view;
}

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

</android.support.v7.widget.RecyclerView>
Run Code Online (Sandbox Code Playgroud)

更多代码:

活动布局

<?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">

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

<FrameLayout
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

列表项布局:

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

<TextView
    android:id="@+id/album_list_title"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)

列表布局:

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

</android.support.v7.widget.RecyclerView>
Run Code Online (Sandbox Code Playgroud)

我现在已经把代码戳了几个小时,我不知道为什么它不起作用

Dar*_*usL 21

我是一个白痴.

<?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">

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

<FrameLayout
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

默认方向为LinearLayout水平,工具栏的宽度为match_parent,因此我的内容不在屏幕上.这可能是Android上最流行的错误之一,这就是你得到警告的原因,但include必须隐藏它.

  • 我爱你。我花了一个小时。我什至最后还是给自己泡了杯茶,哈哈。 (2认同)