7

Ho seguito le linee guida di recyclerview e ne ho creato uno per l'app che sto facendo, ma non scorre verso il basso per qualche motivo. L'ho confrontato con frammenti di codice di google, così come altri frammenti di codice online e non vedo la differenza. Ho pubblicato una foto e il codice che sto usando. Sto usando le schede, quindi il recyclerview è popolato in un frammento.RecyclerView che non scorre verso il basso

ciò che l'applicazione si presenta come:

http://imgur.com/H5uOLFR

la classe di adattatori:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 
private List<Group> groups; 

// Provide a reference to the views for each data item 
// Complex data items may need more than one view per item, and 
// you provide access to all the views for a data item in a view holder 
public class ViewHolder extends RecyclerView.ViewHolder { 
    // each data item is just a string in this case 
    public TextView groupName; 
    public TextView groupDate; 
    public TextView groupLocation; 
    public TextView className; 

    public ViewHolder(View v) { 
     super(v); 
     groupName = (TextView) v.findViewById(R.id.groupName); 
     groupDate = (TextView) v.findViewById(R.id.groupDate); 
     groupLocation = (TextView) v.findViewById(R.id.groupLocation); 
     className = (TextView) v.findViewById(R.id.className); 
    } 
} 

/* 
* TODO: finish this method 
*/ 
public void add(int position, String item) { 

    notifyItemInserted(position); 
} 

public void remove(String item) { 
    int position = groups.indexOf(item); 
    groups.remove(position); 
    notifyItemRemoved(position); 
} 

// Provide a suitable constructor (depends on the kind of dataset) 
public MyAdapter(List<Group> groupsList) { 
    groups = groupsList; 
    Log.d("TEST", "Number of Groups: " + 
      Integer.toString(groups.size())); 
} 

// Create new views (invoked by the layout manager) 
@Override 
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
               int viewType) { 
    // create a new view 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.group_view, parent, false); 
    // set the view's size, margins, paddings and layout parameters 
    ViewHolder vh = new ViewHolder(v); 
    return vh; 
} 

// Replace the contents of a view (invoked by the layout manager) 
@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    // - get element from your dataset at this position 
    // - replace the contents of the view with that element 
    final Group group = groups.get(position); 
//  holder.groupName.setText(group.getName()); 
    holder.groupName.setText(group.getName()); 
    holder.groupDate.setText(group.getFormattedDate()); 
    holder.groupLocation.setText(group.getLocation()); 
    holder.className.setText(group.getParent().getName()); 
} 

// Return the size of your dataset (invoked by the layout manager) 
@Override 
public int getItemCount() { 
    return groups.size(); 
} 

} 

La classe Fragment:

public class groupsFragment extends Fragment implements GroupLeaver, GroupRetriever { 
private RecyclerView rv; 
private List<Group> groups; 
private ProgressDialog progressDialog; 

@Override 
public void onCreate(Bundle savedInstance){ 
    super.onCreate(savedInstance); 
    Log.d("TEST", "Entered onCreate"); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    AppMain.getController().retrieveGroups(groupsFragment.this); 
    Log.d("TEST", "Entered onCreateView"); 
    View rootView = inflater.inflate(R.layout.groups_fragment, container, false); 

    rv = (RecyclerView) rootView.findViewById(R.id.recyclerView); 

    rv.setLayoutManager(new LinearLayoutManager(getActivity())); 

    Log.d("TEST", "Size of LIST: " + Integer.toString(groups.size())); 
    MyAdapter adapter = new MyAdapter(groups); 
    rv.setAdapter(adapter); 

    return rootView; 
} 

@Override 
public void onMyGroupsFound(List<Group> groups) { 
    Log.d("TEST", "Entered onMyGroupsFound"); 
    Logg.info(this.getClass(), "Found %d groups for member %s", groups.size(), User.getCurrentUser().getDisplayName()); 
    this.groups = groups; 
} 

@Override 
public void onGroupLeft(Group oldGroup) { 

} 

@Override 
public void onGroupLeftFailed(Group group, ParseException e) { 

} 
} 

Il layout XML per la recyclerview:

<?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:orientation="vertical" 
> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recyclerView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:divider="@null"/> 

</FrameLayout> 

Il layout xml per le voci recyclerview:

<?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="wrap_content" 
> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="16dp" 
    android:orientation="horizontal"> 

    <LinearLayout 
     android:layout_height="wrap_content" 
     android:layout_width="0dp" 
     android:layout_weight="3" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/groupName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Group Name" 
      /> 

     <TextView 
      android:id="@+id/groupDate" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Group Date" 
      /> 

     <TextView 
      android:id="@+id/groupLocation" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Group Location" 
      /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_height="wrap_content" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/className" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:gravity="right" 
      android:text="Class Name" 
      /> 
    </LinearLayout> 

</LinearLayout> 
</FrameLayout> 
+0

Si prega di etichettare il codice con rispetto ai file per un confronto più facile. Sono principalmente interessato al layout che contiene il tuo frammento. – JoxTraex

+0

Mi dispiace di non avere idea del loro problema, ma piuttosto di come stavo creando il frammento stesso. –

risposta

2

Grazie a tutti coloro che hanno risposto, ma si rivela il problema era la versione di RecyclerView I stava compilando.

In precedenza stavo compilando questo

compile 'com.android.support:recyclerview-v7:22.0.0' 

Ma ho cambiato in questo e ha funzionato

compile 'com.android.support:recyclerview-v7:22.2.0' 

Crediti per @roi divon per la risposta: CoordinatorLayout with RecyclerView & CollapsingToolbarLayout

+0

forse dovresti etichettarlo correttamente perché quando guardo la tua risposta, è la stessa su entrambi i lati – JoxTraex

-1

Forse aggiungendo queste righe al recyclerView farà:

android:scrollbarAlwaysDrawVerticalTrack="true" 
android:scrollbars="vertical" 

Questo è il mio recyclerView che sta lavorando:

<android.support.v7.widget.RecyclerView 
      android:id="@+id/menuRecycler" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scrollbarAlwaysDrawVerticalTrack="true" 
      android:scrollbars="vertical"/> 
+0

Purtroppo non funziona –

+0

@ Mehul Goel Il mio recyclerView si trova in una situazione di parentela. Lo proveresti? –

+0

@ MehulGoel E fai qualcos'altro. Prima imposta l'adattatore e poi imposta il layoutManager del recyclerview. vedere se funziona –

-1

Non sono sicuro, ma penso che il problema potrebbe essere Framelayout Puoi provare con Linearlayout invece di Framelayout nel layout xml per le voci recyclerview

+0

Grazie per la risposta, ma non è questo il problema. Ho allegato un repo di seguito con l'esempio di codice di google. Utilizzano anche framelayout: https://github.com/udacity/Advanced_Android_Development/tree/6.16_Starting_RecyclerView_Finish –

6

È possibile utilizzare queste linee per scorrere recyclerview a:

list.add(0, group); 
adapter.notifyItemInserted(0); 
recyclerview.scrollToPosition(0); 
+0

Se seguiamo questi passaggi allora funziona bene –

+0

salvavita: D ..... –

Problemi correlati