2017-01-25 6 views
0

私はプログラム的CardViewを作成してrecyclerViewcardViewを作成しようとしていますが、ここに私のコードでプログラムCardViewが表示されていない私は、メインクラスのXMLRecyclerViewは、

onCreateを使用することを教えてください

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.lesson_layout, container, false); 

    ExampleRecyclerView = (RecyclerView) rootView.findViewById(R.id.ExampleRecyclerView); 
    List<ViewExample> exampleList = new ArrayList<>(); 
    Log.i("dddddd", String.valueOf(exampleList)); 
    //alos the list just show [] in the Logs 

    adapter = new ExampleAdapter(this, exampleList); 
    LinearLayoutManager llm = new LinearLayoutManager(getActivity()); 
    llm.setSmoothScrollbarEnabled(true); 
    ExampleRecyclerView.setScrollbarFadingEnabled(true); 
    ExampleRecyclerView.setLayoutManager(llm); 

    ExampleRecyclerView.setAdapter(adapter); 
    return rootView; 
} 

ViewExampleクラス

public class ViewExample { 
    private String StepHeader, Code, Explanation; 

    public ViewExample(String stepHeader, String code, String explanation) { 
     StepHeader = stepHeader; 
     Code = code; 
     Explanation = explanation; 
    } 

    Getters & Setters are here... 
} 

そしてAdapter

public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleHolder> { 

    CardView ExampleCV; 
    List<ViewExample> exampleList; 
    ViewLesson viewLesson; 


    public ExampleAdapter(ViewLesson viewLesson, List<ViewExample> exampleList) { 
     this.viewLesson = viewLesson; 
     this.exampleList = exampleList; 
    } 


    public class ExampleHolder extends RecyclerView.ViewHolder { // here is where you define what text have value 
     LinearLayout parentL; 
     public ExampleHolder(View itemView) { 
      super(itemView); 
      parentL = new LinearLayout(parentL.getContext()); 
      ExampleCV = new CardView(ExampleCV.getContext()); 
      ExampleCV.setLayoutParams(new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT)); 
      parentL.setLayoutParams(new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT)); 
      parentL.setOrientation(LinearLayout.VERTICAL); 
      ExampleCV.addView(parentL); 
     } 
    } 

    @Override 
    public ExampleHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     return new ExampleHolder(ExampleCV); 
    } 

    @Override 
    public void onBindViewHolder(final ExampleHolder holder, int position) { 
     TextView tv = null; 
     final TextView finalTv = tv; 
     RootRef.child("Development").child("Level 2").child("Intent").child("Putextra").child("Examples") 
       .addChildEventListener(new ChildEventListener() { 
      @Override 
      public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
       Log.i("isa 5air", String.valueOf(dataSnapshot.getValue())); 
       finalTv.setText(String.valueOf(dataSnapshot.getValue())); 
       holder.parentL.addView(finalTv); 
       adapter.notifyDataSetChanged(); 
      } 

      @Override 
      public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

      } 

      @Override 
      public void onChildRemoved(DataSnapshot dataSnapshot) { 

      } 

      @Override 
      public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

      } 

      @Override 
      public void onCancelled(FirebaseError firebaseError) { 

      } 
     }); 
    } 

    @Override 
    public int getItemCount() { 
     return 0; 
    } 
    } 

編集 NB:私は、私はそれはあなたが使用することができます

答えて

0

をプリントアウトしていないことでテスト・ログを置くように、コードがonBindViewHolderに入らないことに気づきましたcardviewであなたのは、一つだけの子供、あなたが別のコンテナのレイアウトを使用することができcardview以下に示すようlinearなまたはあなたが必要と相対

<android.support.v7.widget.CardView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_margin="5dp" 
     card_view:cardCornerRadius="2dp" 
     card_view:contentPadding="10dp"> 

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

       ............some other views..... 

     </LinearLayout> 

</android.support.v7.widget.CardView> 
あなたのコードで
+0

しかし、私はより多くを追加するためにリサイクルビューを作成したいですあらかじめ良いものを持っている方 –

0

、それはあなたがRecyclerView Adapter

List<ViewExample> exampleList = new ArrayList<>(); 
Log.i("dddddd", String.valueOf(exampleList)); 
//alos the list just show [] in the Logs 
adapter = new ExampleAdapter(this, exampleList); 

に空のリストを渡しているようですが、変更を推奨:

1.Youは、アダプタに渡す前に、その中にいくつかの要素を追加するかに要素を追加することができますリストその後、怒鳴る

01と

adapter.notifyDataSetChanged(); 

2.InあなたExampleAdapter変更getItemCount()メソッドを呼び出します

@Override 
public int getItemCount() { 
    return exampleList.size(); 
} 

編集:ExampleHolder

3.ChangeあなたonCreateViewHolder()

@Override 
public ExampleHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     ExampleCV = new CardView(ExampleCV.getContext()); 
     ExampleCV.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT)); 
    return new ExampleHolder(ExampleCV); 
} 

4.Constructorと:

public ExampleHolder(View itemView) { 
     super(itemView); 
     parentL = new LinearLayout(parentL.getContext()); 

     parentL.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT)); 
     parentL.setOrientation(LinearLayout.VERTICAL); 
     itemView.addView(parentL); 
    } 
+0

説明ありがとうございますrkもデータを表示する私はnotifyDataSetChangedをアダプタの前にonCreateに入れようとしましたが、firebaseからデータを取得した後はうまく動作しませんでしたか?または私はCardViewを間違った方法と呼んでいますか? –

+0

あなたは 'getItemCount()'メソッドを変更しました –

+0

はい、また私はそれがonBindViewHolderメソッドに入っていないことに気付きました –