2017-04-26 8 views
-1

Ich habe ein recycleView und ich setze darauf einen Adapter, aber ich weiß nicht, warum es nichts zeigt. Ich denke, dass ich die gleiche Sache tue ich gemacht, jedes Mal habe ich es verwenden ... Hier ist der Code:RecycleView zeigt das Ergebnis nicht an

Das Layout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/iron"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/appointment_list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

Die Aktivität:

Hier verwende ich ein Moderator, der mir eine Liste gibt. Ich debugge es und es funktioniert.

public class AppointmentDateSelectionView extends NotificationActivity implements MVP.View { 

    RecyclerView dayAppointments; 


    AppointmentDateSelectionPresenter presenter; 

    private ListAdapter adapter; 
    List<ResponseAppointmentHours> availableHours; 
    private int idDoctor; 



    @Override 
    protected void onCreate(@Nullable Bundle savedState) { 
     super.onCreate(savedState); 
     setContentView(R.layout.activity_appointment_date_selection); 
     BaseManager<String> managerToken = new TokenManager(getApplicationContext()); 
     dayAppointments = (RecyclerView) findViewById(R.id.appointment_list); 
     Intent i = getIntent(); 
     idDoctor = i.getIntExtra(Params.INTENT.ID_DOCTOR, 0); 
     presenter = new AppointmentDateSelectionPresenter(managerToken, idDoctor); 
     presenter.onViewCreated(this); 
     presenter.initialize(); 
     dayAppointments.addItemDecoration(new SimpleDividerItemDecoration(this)); 
     Calendar endDate = Calendar.getInstance(); 
     endDate.add(Calendar.MONTH, 5); 
    } 

@Override 
    public void setDoctorAppointmentList(List<ResponseAppointmentHours> hoursList) { 
     availableHours = hoursList; 
     adapter = new ListAdapter(availableHours); 
     dayAppointments.setAdapter(adapter); 
     dayAppointments.setItemAnimator(new CustomDefaultItemAnimator()); 
     dayAppointments.setHasFixedSize(true); 
     adapter.notifyDataSetChanged(); 
    } 

Die ListAdapter:

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ItemViewHolder> { 

    private final OnDeleteClickListener listener1; 

    private static List<ResponseAvailableHours> list = new ArrayList<>(); 

    static class ItemViewHolder extends RecyclerView.ViewHolder { 

     @BindView(R.id.availability_from) 
     TextView availabilityText; 

     @BindView(R.id.delete) 
     ImageView delete; 


     ItemViewHolder(View v) { 
      super(v); 
      ButterKnife.bind(this, v); 
     } 

     public void bind(final ResponseAvailableHours item, final OnDeleteClickListener listener) { 
      delete.setOnClickListener(new View.OnClickListener() { 
       @Override public void onClick(View v) { 
        list.remove(item); 
        listener.onItemClick(item); 
       } 
      }); 
     } 

    } 

    ListAdapter(OnDeleteClickListener listener1, List<ResponseAvailableHours> data) { 
     this.listener1 = listener1; 
     list = data; 
    } 

    @Override 
    public ListAdapter.ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.avaliability_item, parent, false); 
     return new ItemViewHolder(v); 
    } 

    @Override 
    public void onBindViewHolder(ListAdapter.ItemViewHolder holder, int position) { 
     final ResponseAvailableHours hour = list.get(position); 
     SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 
     try { 
      SimpleDateFormat newFormat = new SimpleDateFormat("HH:mm"); 
      Date endDate = formatter.parse(hour.getTimeEnd()); 
      Date iniTime = formatter.parse(hour.getTimeIni()); 
      String available = "Cada " + WeekDays.getDays(hour.getWeekday()) + " de " + newFormat.format(iniTime) + "h a " + newFormat.format(endDate) + "h"; 
      holder.availabilityText.setText(available); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     holder.bind(hour, listener1); 
    } 

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

In der Aktivität, wenn es von adapter = new ListAdapter(availableHours); geht die ListAdapter Methode richtig gebrannt wird, aber sonst nichts geschieht.

Antwort

1

Aus Ihrem Code scheint es, dass Sie nach dem Initialisieren Ihrer Recycler-Ansicht (dayAppointments) vergessen haben, den Layout-Manager hinzuzufügen.

Versuchen Hinzufügen von Code folgt, hoffe, es kann

dayAppointments.setLayoutManager(new LinearLayoutManager(this));// since you have activity 

hilft, wenn Sie es in Fragment verwenden möchten,

dayAppointments.setLayoutManager(new LinearLayoutManager(getActivity())); 
1

Sie müssen nur Layoutmanager hinzufügen

dayAppointments.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); 

nach Liste Initialisierung für horizontal. Sie können es auch vertikal machen oder GridLayoutManager verwenden

Verwandte Themen