2017-03-17 73 views
1

我的片段回收站适配器不叫onCreateViewHolder

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

问题出在您的post_item.xml中。无论身高不是固定值,都应该包装内容。将所有匹配父级高度更改为包装内容。 –

+0

我想你调用适配器上的任何通知方法? –

回答

1

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

相关问题