2017-03-17 3 views
1

マイ・フラグメントリサイクラーアダプタは

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> 

onCreateViewHolder呼び出すことはありません。

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を他のものに変更すると、正しく動作します。