2017-03-17 61 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更改爲任何其他 - 它將正常工作。

相關問題