7

Я следил за рекомендациями по recyclerview и строил один для приложения, которое я создаю, но по какой-то причине он не прокручивает вниз. Я сравнил его с фрагментами кода Google, а также другими фрагментами кода в Интернете и не вижу разницы. Я опубликовал изображение и код, который я использую. Я использую вкладки, поэтому recyclerview заполняется фрагментом.RecyclerView не прокрутка к основанию

Что приложение выглядит следующим образом:

http://imgur.com/H5uOLFR

класс адаптера:

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

} 

Класс фрагменте:

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

} 
} 

XML-макет для 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> 

XML-макет для элементов 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

Пожалуйста маркировать свой код в отношении файлов для более простого сравнения. Меня в основном интересует макет, содержащий ваш фрагмент. – JoxTraex

+0

Прошу прощения, я понятия не имел, что они лежат там, но, скорее, как я сам делал фрагмент. –

ответ

2

Спасибо всем, кто откликнулся, но оказывается, что проблема была версия RecyclerView I компиляция.

Раньше я готовил этот

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

Но я изменил его на это, и она работала

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

Кредиты на @roi Дивон для ответа: CoordinatorLayout with RecyclerView & CollapsingToolbarLayout

+0

, возможно, вы должны правильно его пометить, потому что, когда я смотрю на ваш ответ, его то же самое с обеих сторон – JoxTraex

-1

Возможно добавление этих строк в recyclerView будет делать:

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

Это мой recyclerView, который работает:

<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

Это не сработало –

+0

@Mehul Goel Мой recyclerView находится в режиме релятивирования. Вы бы попробовали? –

+0

@MehulGoel И сделайте что-нибудь еще. Сначала установите адаптер, а затем установите layoutManager для recyclerview. см., если это работает –

-1

Я не уверен, но я думаю, проблема может быть Framelayout Вы можете попробовать Linearlayout вместо Framelayout в вашем XML-макета для элементов recyclerview

+0

Спасибо, что ответили, но это не проблема. Я привел репо ниже с примером кода Google. Они также используют framelayouts: https://github.com/udacity/Advanced_Android_Development/tree/6.16_Starting_RecyclerView_Finish –

6

Вы можете использовать эти строки для прокрутки recyclerview к:

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

Если мы последуем этим шагам, то его рабочий штраф –

+0

спасатель жизни: D ..... –

 Смежные вопросы

  • Нет связанных вопросов^_^