7

Ich folgte den Recyclerview Richtlinien und baute eine für die App, die ich mache, aber es nicht aus irgendeinem Grund nach unten scrollen. Ich habe es mit Google Code Snippets, sowie anderen Code Snippets online verglichen und kann den Unterschied nicht sehen. Ich habe ein Bild und den Code, den ich verwende, gepostet. Ich verwende Tabulatoren, daher wird die Recycleransicht in einem Fragment aufgefüllt.RecyclerView nicht scrollen nach unten

Was die App wie folgt aussehen:

http://imgur.com/H5uOLFR

die Adapter Klasse:

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(); 
} 

} 

Das Fragment Klasse:

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) { 

} 
} 

Das XML-Layout für die recyclerview:

Das XML-Layout für den recyclerview Artikel:

<?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

Bitte beschriften Sie Ihren Code mit Bezug auf die Dateien zum leichteren Vergleich. Ich bin hauptsächlich an dem Layout interessiert, das dein Fragment enthält. – JoxTraex

+0

Es tut mir leid, dass ich keine Ahnung hatte, dass das Problem dort lag, sondern wie ich das Fragment selbst machte. –

Antwort

2

Vielen Dank an alle, die geantwortet haben, aber stellt sich heraus, das Problem ist die Version von RecyclerView Ich war war kompilieren.

Bisher wurde Kompilieren ich diesen

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

Aber ich änderte es so weit und es funktionierte

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

Credits @roi Divon für die Antwort ein: CoordinatorLayout with RecyclerView & CollapsingToolbarLayout

+0

vielleicht sollten Sie es richtig beschriften, denn wenn ich auf Ihre Antwort schaue, ist es das gleiche auf beiden Seiten – JoxTraex

-1

Vielleicht diese Zeilen zum recyclerView Hinzufügen tun:

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

Das ist mein recyclerView, die funktionieren:

<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

Dies hat leider nicht funktioniert –

+0

@Mehul Goel Mein recyclerView ist in einem relativen Layout. Würdest du es versuchen? –

+0

@MehulGoel Und etwas anderes tun. Setzen Sie zuerst den Adapter und stellen Sie dann den LayoutManager der Recyclerview ein. sehen, ob das funktioniert –

-1

Ich bin mir nicht sicher, aber ich denke, Problem könnte Framelayout Sie können mitversuchenstatt Framelayout in Ihrem XML-Layout für die recyclerview Artikel

+0

Danke für die Antwort, aber das ist nicht das Problem. Ich habe unten ein Repo mit google's Codebeispiel angehängt. Sie verwenden framelayouts auch: https://github.com/udacity/Advanced_Android_Development/tree/6.16_Starting_RecyclerView_Finish –

6

Sie können diese Linien verwenden recyclerview zu blättern:

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

Wenn wir diese Schritte befolgen, funktioniert es gut –

+0

Lebensretter: D ..... –

Verwandte Themen