Recycler适配器不会调用onCreateViewHolder

时间:2017-03-17 18:48:00

标签: java android android-adapter recycler-adapter

我的片段

public class PostFragment extends BaseFragment implements PostView {
@Inject
PostPresenter presenter;

private RecyclerView recyclerView;
PostAdapter adapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_post, container, false);

    recyclerView = (RecyclerView) v.findViewById(R.id.postFragmentRecycler);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    String s  = "word";
    ArrayList<String> array = new ArrayList<>();
    for(int i = 0; i != 20; i++) {
        array.add(s);
    }

    adapter = new PostAdapter(array);
    recyclerView.setAdapter(adapter);

    return v;
}

适配器

public class PostAdapter extends RecyclerView.Adapter {

private ArrayList<String> arrayList;

public PostAdapter(ArrayList<String> arrayList) {
    Log.d("ADAPTER", "constructor");
    this.arrayList = arrayList;
}

 class MyViewHolder extends RecyclerView.ViewHolder {

    public View view;

    MyViewHolder(View itemView) {
        super(itemView);
        this.view = itemView;
    }
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    Log.d("ADAPTER", "CREATE");
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.post_item, parent, false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    Log.d("ADAPTER", "bind");
}

@Override
public int getItemCount() {
    Log.d("ADAPTER", "size = " + String.valueOf(arrayList.size()));
    return arrayList.size();
}

}

XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="exp.glorio.view.fragments.PostFragment">

<android.support.v7.widget.RecyclerView
    android:id="@+id/postFragmentRecycler"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>

post_item

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

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:layout_marginTop="10dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:visibility="visible">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/postGroupLogo"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_marginLeft="20dp"
                android:layout_gravity="center"/>

            <TextView
                android:id="@+id/postGroupName"
                android:layout_width="180dp"
                android:layout_height="30dp"
                android:textColor="@color/colorText"
                android:textSize="12sp"
                android:layout_marginLeft="30dp"
                android:layout_gravity="center"
                />
        </LinearLayout>

        <TextView
            android:id="@+id/postText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

        <LinearLayout
            android:id="@+id/postAttachmentsContainer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

        </LinearLayout>
    </LinearLayout>

</android.support.v7.widget.CardView>

并记录:

03-17 17:11:23.753 30538-30538/exp.glorio D/ADAPTER: constructor
03-17 17:11:23.903 30538-30538/exp.glorio D/ADAPTER: size = 20
03-17 17:11:23.903 30538-30538/exp.glorio D/ADAPTER: size = 20
03-17 17:11:23.953 30538-30538/exp.glorio D/ADAPTER: size = 20
03-17 17:11:23.953 30538-30538/exp.glorio D/ADAPTER: size = 20

我在这个应用程序中有许多其他适配器,他们工作。在这种情况下,你可以看到我不会忘记在xml中的ScrollView下添加LayoutManager和Recycler视图。构造函数和getItemCount工作(为什么4次?)但onBindViewHolder和onCreateViewHolder没有。

1 个答案:

答案 0 :(得分:2)

问题在于活动的根布局。这是android.support.constraint.ConstraintLayout。结合片段容器的参数layout_height“match_parent”,它给出了这个问题。如果将ConstraintLayout更改为任何其他 - 它将正常工作。