2017-02-14 30 views
1

У меня есть Бесконечный RecyclerView с библиотекой PullLoadViewандроид RecyclerView нагрузки, когда RecyclerView reachs заканчивается

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

что-то вроде этого приложения мне нужно:

RecyclerView первый:

first recyclerView

RecyclerView первый достигает конца и новый RecyclerView показать

first recyclerView reaches end and new recyclerView show up

RecyclerView новый продолжить тыс е первый RecyclerView в полном объеме layour

new recyclerView continue the first recyclerView in full layour screen

XML код:

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/activity_search" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

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

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

</LinearLayout> 
+0

ли Вы хотите использовать Recyclerview только для нижней точки зрения, а? Можете ли вы использовать ListView для нижнего? – raktale

+0

Вы должны объединить эти 2 и использовать 'viewtype' см https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#getItemViewType(int) – WenChao

+0

Я не хочу Точная вещь, как изображения выше, мне просто нужно решение сделать два match_parent recyclerViews после друг друга –

ответ

1

Замените xml источник с ниже источника

<?xml version="1.0" encoding="utf-8"?> 

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:scrollbars="none"> 
<LinearLayout 
    android:id="@+id/activity_search" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

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

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

</android.support.v4.widget.NestedScrollView> 
+0

он отлично работает, но потому, что один из моего RecyclerViews бесконечен с библиотекой у него есть некоторые проблемы с этим решением, но я исправлю, спасибо за помощь –

+0

в этом растворе делает все строки нагрузки RecyclerView сразу? это оптимально? –

+0

не оптимальный. Но да, это отобразит результат api и сразу откроет просмотр ресайклеров. Но в случае нагрузки более с учетом ресайклера это состояние в OnScroll нагрузки больше данных утилизатор также называется –

0

Поместите их в NestedScrollView с вертикально ориентированной LinearLayout и отключить их скроллинга, установив их менеджер LinearLayout, как это.

LinearLayoutManager mLayoutManager = new LinearLayoutManager(this) { 
     @Override 
     public boolean canScrollVertically() { 
      return false; 
     } 
    }; 
+0

Как мой xml будет выглядеть? –

0

Использование ListView в качестве вид снизу и в вашей ListView заголовка положить RecycerView

list_sample.xml (Это ваш основной макет для деятельности набора контента)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/content_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <ListView 
     android:id="@+id/list_sample" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</RelativeLayout> 

header_recycler.xml (Список макет представления заголовка)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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/list_header" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

item_header.xml (элементы для списка заголовков, т.е. рециркуляции erview один)

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

    <TextView 
     android:id="@+id/item_header_regular" 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:background="#FF2255" /> 


</LinearLayout> 

list_item.xml (элемент представления Листа)

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

    <TextView 
     android:id="@+id/text" 
     android:layout_width="match_parent" 
     android:layout_height="50dp" /> 

</LinearLayout> 

HeaderRecyclerView.java (RecyclerView адаптер)

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import java.util.List; 

public class HeaderRecyclerView extends RecyclerView.Adapter<HeaderRecyclerView.HeaderHolder> { 
    private final Context context; 
    private List<String> items; 

    public HeaderRecyclerView(List<String> items, Context context) { 
     this.items = items; 
     this.context = context; 
    } 

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

    @Override 
    public void onBindViewHolder(HeaderHolder holder, int position) { 
     String item = items.get(position); 
     holder.textView.setText(item); 
    } 

    @Override 
    public int getItemCount() { 
     if (items == null) { 
      return 0; 
     } 
     return items.size(); 
    } 

    class HeaderHolder extends RecyclerView.ViewHolder { 

     TextView textView; 

     HeaderHolder(View itemView) { 
      super(itemView); 
      textView = (TextView) itemView.findViewById(R.id.item_header_regular); 
     } 
    } 
} 

BottomListAdapter.java (ListView адаптер)

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 

public class BottomListAdapter extends BaseAdapter { 

    private List<String> items = new ArrayList<>(); 
    private Context context; 

    public BottomListAdapter(List<String> items, Context context) { 
     this.items = items; 
     this.context = context; 
    } 

    @Override 
    public int getCount() { 
     return items.size(); 
    } 

    @Override 
    public String getItem(int i) { 
     return items.get(i); 
    } 

    @Override 
    public long getItemId(int i) { 
     return i; 
    } 

    @Override 
    public View getView(int i, View convertView, ViewGroup viewGroup) { 

     TextView txtView; 

     if (convertView == null) { 
      convertView = LayoutInflater.from(context) 
        .inflate(R.layout.list_item, viewGroup, false); 
      txtView = (TextView) convertView.findViewById(R.id.text); 
      convertView.setTag(new ViewHolder(txtView)); 
     } else { 
      ViewHolder viewHolder = (ViewHolder) convertView.getTag(); 
      txtView = viewHolder.txtView; 
     } 

     String string = getItem(i); 
     txtView.setText(string); 

     return convertView; 
    } 

    private static class ViewHolder { 

     public final TextView txtView; 

     public ViewHolder(TextView txtView) { 
      this.txtView = txtView; 
     } 
    } 

} 

В Ваш OnCreate использовать ниже для инициализации, как follwing

ListView listView = (ListView) findViewById(R.id.list_sample); 

     View view = getLayoutInflater().inflate(R.layout.header_recycler, null); 

     RecyclerView headerList = (RecyclerView) view.findViewById(R.id.list_header); 

     List<String> strings = new ArrayList<>(); 

     for (int i = 0; i < 50; i++) { 
      strings.add(i + ""); 
     } 

     headerList.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); 
     headerList.setAdapter(new HeaderRecyclerView(strings, this)); 

     listView.addHeaderView(view); 
     listView.setAdapter(new BottomListAdapter(strings, this)); 
+0

Я не понимаю, как выглядит xml-код? спасибо –

+0

У вас xml у вас будет только ListView, дайте мне минуту, я буду скомпилировать код и разместить здесь. – raktale