2017-01-25 1 views
0

Я пытаюсь создать cardView с recyclerView с созданием CardView программно, вот мой код, если это не возможно, пожалуйста, дайте мне знать, чтобы использовать XMLRecyclerView не отображается программным способом CardView

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: Я заметил, что код не входит onBindViewHolder, как я ставлю тест входа в него не печатает из

ответ

0

вы можете использовать в ваш с 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 может добавить некоторые элементы в нем, прежде чем перейти к адаптеру или добавить элемент в список и затем вызвать

adapter.notifyDataSetChanged(); 

2.In ваш ExampleAdapter изменения getItemCount() метода с сильфоном

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

Edit:

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 из ExampleHolder с:

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

спасибо за объяснение, но это не wo rk показать данные также я попытался поставить notifyDataSetChanged в onCreate перед адаптером и после того, как данные из firebase не работают, это неправильное место? или я неправильно вызываю CardView? –

+0

Вы изменили свой метод getItemCount() –

+0

Да, также я заметил, что он не вводит метод onBindViewHolder –