2016-09-06 25 views
1

私のアプリケーション(RecyclerView)にサーバーからデータをロードして、このジョブでアプリケーションを起動すると10個の投稿が表示され、recyclerViewに別の投稿が表示されます。レイアウトをRecyclerViewにアンドロイドで設定する方法

私は以下のコードを書いていますが、他の10個の投稿を取得すると、が表示されません読み込みレイアウト!私は他の10の記事を得るとき、最初にを表示するのレイアウトを表示し、次に他を表示する10 投稿

のために、私はRetrofit v2を使用し、カスタムのためにrecyclerViewためEndless methosが、私はこのクラスを使用してインターネットに接続:EndLess Class

My活動コード:

public class Category_page extends AppCompatActivity implements ConnectivityReceiver.ConnectivityReceiverListener { 

    private static final long RIPPLE_DURATION = 250; 
    private Toolbar toolbar; 
    private TextView toolbar_title; 
    private ImageView toolbar_menuImage; 
    private Button categoryCheckNet_button; 
    private RelativeLayout root; 
    private CategoryAdapter mAdapter; 
    private RecyclerView cat_recyclerView; 
    private LinearLayoutManager mLayoutManager; 
    private RelativeLayout loadLayout, checkNetLayout; 
    private String catTitle = ""; 
    private Integer catID; 
    private Bundle bundle; 
    private int pageCount = 1; 
    private Context context; 

    private List<R_CatModel> models; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.category_page); 

     // Hide StatusBar color 
     getWindow().getDecorView().setSystemUiVisibility(
       View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 

     // Initializing 
     context = Category_page.this; 
     toolbar = (Toolbar) findViewById(R.id.category_toolbar); 
     cat_recyclerView = (RecyclerView) findViewById(R.id.category_recycler); 
     toolbar_title = (TextView) toolbar.findViewById(R.id.toolbar_pages_title); 
     mLayoutManager = new LinearLayoutManager(this); 
     root = (RelativeLayout) findViewById(R.id.category_root); 
     loadLayout = (RelativeLayout) findViewById(R.id.category_empty_layout); 
     checkNetLayout = (RelativeLayout) findViewById(R.id.category_checkInternet_layout); 
     categoryCheckNet_button = (Button) checkNetLayout.findViewById(R.id.checkNet_button); 
     // Toolbar 
     setSupportActionBar(toolbar); 
     if (toolbar != null) { 
      getSupportActionBar().setTitle(""); 
     } 

     // Receive Data 
     bundle = getIntent().getExtras(); 
     catID = bundle.getInt("categoryID"); 
     if (bundle != null) { 
      catTitle = bundle.getString("categoryTitle"); 
     } 
     if (catTitle != null) { 
      toolbar_title.setText(catTitle); 
     } 

     // Load Data 
     loadData(); 

     // Load Progress 
     loadLayout.setVisibility(View.VISIBLE); 

     // Menu 
     View guillotineMenu = LayoutInflater.from(this).inflate(R.layout.menu_layout, null); 
     root.addView(guillotineMenu); 
     toolbar_menuImage = (ImageView) toolbar.findViewById(R.id.toolbar_pages_logo); 
     new GuillotineAnimation.GuillotineBuilder(guillotineMenu, guillotineMenu.findViewById(R.id.menu_layout_image), toolbar_menuImage) 
       .setStartDelay(RIPPLE_DURATION) 
       .setActionBarViewForAnimation(toolbar) 
       .setClosedOnStart(true) 
       .build(); 
     // RecyclerView 
     cat_recyclerView.setLayoutManager(mLayoutManager); 
     cat_recyclerView.setHasFixedSize(true); 
     cat_recyclerView.addOnScrollListener(new EndlessRecyclerOnScrollListener(mLayoutManager) { 
      @Override 
      public void onLoadMore(int current_page) { 

       Retrofit_ApiInterface apiInterface = Retrofit_ApiClient.getClient().create(Retrofit_ApiInterface.class); 
       Call<R_CatModelResponse> call = apiInterface.getCatMoreResponse(catID, current_page); 

       call.enqueue(new Callback<R_CatModelResponse>() { 
        @Override 
        public void onResponse(Call<R_CatModelResponse> call, Response<R_CatModelResponse> response) { 

         if (response != null) { 
          mAdapter.addNewItem(response.body().getCat_posts()); 
          //loadLayout.setVisibility(View.GONE); 
         } else { 
          //loadLayout.setVisibility(View.VISIBLE); 
          Toast.makeText(Category_page.this, "Error 2", Toast.LENGTH_SHORT).show(); 
          TastyToast.makeText(context, "خطایی رخ داده است", TastyToast.LENGTH_LONG, TastyToast.ERROR); 
         } 
        } 

        @Override 
        public void onFailure(Call<R_CatModelResponse> call, Throwable t) { 

        } 
       }); 
      } 
     }); 

    } 

    private void loadData() { 
     boolean isConnected = ConnectivityReceiver.isConnected(); 

     retrofitData(isConnected); 
    } 

    private void retrofitData(boolean isConnect) { 

     if (isConnect) { 
      Retrofit_ApiInterface apiInterface = Retrofit_ApiClient.getClient().create(Retrofit_ApiInterface.class); 
      Call<R_CatModelResponse> call = apiInterface.getCatResponse(catID); 

      call.enqueue(new Callback<R_CatModelResponse>() { 
       @Override 
       public void onResponse(Call<R_CatModelResponse> call, Response<R_CatModelResponse> response) { 

        if (response != null) { 
         models = response.body().getCat_posts(); 

         mAdapter = new CategoryAdapter(context, cat_recyclerView, models); 
         cat_recyclerView.setAdapter(mAdapter); 
         loadLayout.setVisibility(View.GONE); 

        } else { 
         //loadLayout.setVisibility(View.VISIBLE); 
         Toast.makeText(Category_page.this, "Error 2", Toast.LENGTH_SHORT).show(); 
         TastyToast.makeText(context, "خطایی رخ داده است", TastyToast.LENGTH_LONG, TastyToast.ERROR); 
        } 

        checkNetLayout.setVisibility(View.GONE); 
       } 

       @Override 
       public void onFailure(Call<R_CatModelResponse> call, Throwable t) { 

        //loadLayout.setVisibility(View.VISIBLE); 
        //TastyToast.makeText(context, "لطفا برنامه را مجددا باز کنید", TastyToast.LENGTH_LONG, TastyToast.ERROR); 
        Toast.makeText(Category_page.this, "Error 2", Toast.LENGTH_SHORT).show(); 
        //Cat_EmptyLayout.setVisibility(View.VISIBLE); 
        Log.e("CatResponseError", "Error : " + t); 

       } 
      }); 
     } else { 
      //loadLayout.setVisibility(View.GONE); 
      checkNetLayout.setVisibility(View.VISIBLE); 
      if (mAdapter != null) { 
       mAdapter.clear(); 
       cat_recyclerView.setAdapter(mAdapter); 
      } 
      categoryCheckNet_button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        loadData(); 
       } 
      }); 
     } 
    } 

    public void post_back(View view) { 
     onBackPressed(); 
    } 

    @Override 
    protected void attachBaseContext(Context newBase) { 
     super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     // register connection status listener 
     MyApplication.getInstance().setConnectivityListener(this); 
    } 

    @Override 
    public void onNetworkConnectionChanged(boolean isConnected) { 
     retrofitData(isConnected); 
    } 
} 

マイアダプターコード:

public class CategoryAdapter extends RecyclerView.Adapter { 

    private List<R_CatModel> mDateSet; 
    private Context mContext; 

    private final int VIEW_ITEM = 1; 
    private final int VIEW_PROG = 0; 

    // The minimum amount of items to have below your current scroll position 
    // before loading more. 
    private int visibleThreshold = 10; 
    private int lastVisibleItem, totalItemCount; 
    private boolean loading; 
    private OnLoadMoreListener onLoadMoreListener; 

    public CategoryAdapter(Context context, RecyclerView recyclerView, List<R_CatModel> dataSet) { 
     this.mContext = context; 
     this.mDateSet = dataSet; 

     if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) { 

      final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView 
        .getLayoutManager(); 
      recyclerView 
        .addOnScrollListener(new RecyclerView.OnScrollListener() { 
         @Override 
         public void onScrolled(RecyclerView recyclerView, 
               int dx, int dy) { 
          super.onScrolled(recyclerView, dx, dy); 
          totalItemCount = linearLayoutManager.getItemCount(); 
          lastVisibleItem = linearLayoutManager 
            .findLastVisibleItemPosition(); 
          if (!loading 
            && totalItemCount <= (lastVisibleItem + visibleThreshold)) { 
           // End has been reached 
           // Do something 
           if (onLoadMoreListener != null) { 
            onLoadMoreListener.onLoadMore(); 
           } 
           loading = true; 
          } 
         } 
        }); 
     } 
    } 

    @Override 
    public int getItemViewType(int position) { 
     return mDateSet.get(position) != null ? VIEW_ITEM : VIEW_PROG; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     RecyclerView.ViewHolder vh; 
     if (viewType == VIEW_ITEM) { 
      View v = LayoutInflater.from(parent.getContext()).inflate(
        R.layout.post_card_layout, parent, false); 

      vh = new DataViewHolder(v); 
     } else { 
      View v = LayoutInflater.from(parent.getContext()).inflate(
        R.layout.progressbar_item, parent, false); 

      vh = new ProgressViewHolder(v); 
     } 
     return vh; 
    } 

    @Override 
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { 

     if (holder instanceof DataViewHolder) { 
      ((DataViewHolder) holder).main_post_title.setText(Html.fromHtml(mDateSet.get(position).getTitle())); 

      Glide.with(mContext) 
        .load(mDateSet.get(position).getThumbnail_images().getMedium().getUrl()) 
        .placeholder(R.drawable.post_image) 
        .crossFade() 
        .override(600, 350) 
        .into(((DataViewHolder) holder).main_post_image); 

      ((DataViewHolder) holder).main_post_content.setText(Html.fromHtml(mDateSet.get(position).getContent())); 

      // Convert Date //////// 
      String date = mDateSet.get(position).getDate(); 
      String[] parts = date.split(" "); 
      String datePart = parts[0]; 
      String timePart = parts[1]; 

      int year; 
      int month; 
      int day; 

      String[] dateParts = datePart.split("-"); 
      year = Integer.parseInt(dateParts[0]); 
      month = Integer.parseInt(dateParts[1]); 
      day = Integer.parseInt(dateParts[2]); 

      JalaliCalendar.YearMonthDate georgianDate = new JalaliCalendar.YearMonthDate(year, month, day); 
      JalaliCalendar.YearMonthDate JalaliDate = JalaliCalendar.gregorianToJalali(georgianDate); 
      String jalaliDateTime = JalaliDate.toString(); 

      ((DataViewHolder) holder).main_dateTime.setText(jalaliDateTime); 
      //////////////////////// 

      ((DataViewHolder) holder).main_author.setText(Html.fromHtml(mDateSet.get(position).getCatAuthor().getAuthorName())); 
      ((DataViewHolder) holder).main_author.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        R_CatModel model = mDateSet.get(position); 
        v.getContext().startActivity(new Intent(v.getContext(), Profile_page.class)); 
        //.putExtra("author", model.getAuthor()) 
        //.putExtra("authorID", model.getAuthorID()) 
        //.putExtra("authorStatus", model.getAuthorStatus())); 
       } 
      }); 

      ((DataViewHolder) holder).main_category.setText(Html.fromHtml(String.valueOf(mDateSet.get(position).getCategories().get(0).getCatTitle()))); 
      ((DataViewHolder) holder).main_category.setTextColor(mContext.getResources().getColor(R.color.colorAccent)); 

      ((DataViewHolder) holder).main_post_image.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        int pos = holder.getPosition(); 
        R_CatModel model = mDateSet.get(pos); 
        v.getContext().startActivity(new Intent(v.getContext(), PostShow_page.class) 
          .putExtra("title", model.getTitle()) 
          .putExtra("image", model.getThumbnail()) 
          .putExtra("content", model.getContent()) 
          .putExtra("dateTime", model.getDate()) 
          //.putExtra("author", model.getAuthor()) 
          .putExtra("category", model.getTitle())); 

       } 
      }); 

     } else { 
      ((ProgressViewHolder) holder).progressBar.setVisibility(View.VISIBLE); 
     } 
    } 

    public void setLoaded() { 
     loading = false; 
    } 

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

    public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) { 
     this.onLoadMoreListener = onLoadMoreListener; 
    } 

    public void remove(int position) { 
     mDateSet.remove(position); 
     notifyItemRemoved(position); 
    } 

    public void clear() { 
     mDateSet.clear(); 
     notifyDataSetChanged(); 
    } 

    public void addNewItem(List<R_CatModel> newContent) { 
     int start = this.mDateSet.size();//contents is a List of your items initialize it your constructor 
     int end = newContent.size(); 
     mDateSet.addAll(newContent); 
     notifyItemRangeInserted(start + 1, end); 
    } 


    public void add(List<R_CatModel> models) { 
     mDateSet.addAll(models); 
     notifyDataSetChanged(); 
    } 

    public void update(List<R_CatModel> models) { 
     mDateSet.clear(); 
     mDateSet.addAll(models); 
     notifyDataSetChanged(); 
    } 

    public class DataViewHolder extends RecyclerView.ViewHolder { 

     private TextView main_post_title, main_post_content, main_dateTime, main_author, main_category; 
     private ImageView main_post_image; 

     public DataViewHolder(final View itemView) { 
      super(itemView); 

      main_post_title = (TextView) itemView.findViewById(R.id.post_content_title); 
      main_post_image = (ImageView) itemView.findViewById(R.id.post_picture_image); 
      main_post_content = (TextView) itemView.findViewById(R.id.post_content_text); 
      main_dateTime = (TextView) itemView.findViewById(R.id.post_date_text); 
      main_author = (TextView) itemView.findViewById(R.id.post_name_text); 
      main_category = (TextView) itemView.findViewById(R.id.post_category_text); 
     } 
    } 

    public static class ProgressViewHolder extends RecyclerView.ViewHolder { 
     public AVLoadingIndicatorView progressBar; 

     public ProgressViewHolder(View v) { 
      super(v); 
      progressBar = (AVLoadingIndicatorView) v.findViewById(R.id.avloadingIndicatorView); 
     } 
    } 
} 

マイJSON:他の10枚のポストを得るとき、私はロードのレイアウトを表示するにはどうすればよい

{ 
    "status": "ok", 
    "count": 9, 
    "pages": 3, 
    "category": { 
     "id": 1, 
     "slug": "%d8%b3%d8%b1%da%af%d8%b1%d9%85%db%8c", 
     "title": "\u0633\u0631\u06af\u0631\u0645\u06cc", 
     "description": "\u062a\u0648\u06cc \u0627\u06cc\u0646 \u06a9\u0644\u0648\u0646\u06cc \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0648\u0627\u0633\u0647 \u0633\u0631\u06af\u0631\u0645 \u0628\u0648\u062f\u0646 \u0647\u0633\u062a. \u067e\u0633 \u0628\u062f\u0648 \u0628\u0631\u0648 \u062a\u0648\u0634", 
     "parent": 0, 
     "post_count": 29 
    }, 
    "posts": [{ 
     "id": 85, 
     "type": "post", 
     "slug": "%d8%b9%d9%86%d9%88%d8%a7%d9%86-%d8%b3%d9%88%d9%85-%d8%a8%d8%b1%d8%a7%db%8c-%d8%b1%d9%81%d8%b1%d8%b4", 
     "url": "http:\/\/tellfa.com\/tafrihgah\/?p=85", 
     "status": "publish", 
     "title": "\u0639\u0646\u0648\u0627\u0646 \u0633\u0648\u0645 \u0628\u0631\u0627\u06cc \u0631\u0641\u0631\u0634", 
     "title_plain": "\u0639\u0646\u0648\u0627\u0646 \u0633\u0648\u0645 \u0628\u0631\u0627\u06cc \u0631\u0641\u0631\u0634", 
     "content": "<p>\u062f\u06cc\u06af\u0647 \u0639\u0635\u0628\u0627\u0646\u06cc \u0634\u062f\u0645\u060c \u0686\u0631\u0627 \u0631\u0641\u0631\u0634 \u0646\u0645\u06cc\u06a9\u0646\u0647! :@<\/p>\n", 
     "excerpt": "<p>\u062f\u06cc\u06af\u0647 \u0639\u0635\u0628\u0627\u0646\u06cc \u0634\u062f\u0645\u060c \u0686\u0631\u0627 \u0631\u0641\u0631\u0634 \u0646\u0645\u06cc\u06a9\u0646\u0647! :@<\/p>\n", 
     "date": "2016-04-20 15:02:26", 
     "modified": "2016-04-20 15:02:26", 
     "categories": [{ 
      "id": 1, 
      "slug": "%d8%b3%d8%b1%da%af%d8%b1%d9%85%db%8c", 
      "title": "\u0633\u0631\u06af\u0631\u0645\u06cc", 
      "description": "\u062a\u0648\u06cc \u0627\u06cc\u0646 \u06a9\u0644\u0648\u0646\u06cc \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0648\u0627\u0633\u0647 \u0633\u0631\u06af\u0631\u0645 \u0628\u0648\u062f\u0646 \u0647\u0633\u062a. \u067e\u0633 \u0628\u062f\u0648 \u0628\u0631\u0648 \u062a\u0648\u0634", 
      "parent": 0, 
      "post_count": 29 
     }], 
     "tags": [], 
     "author": { 
      "id": 1, 
      "slug": "tellfa", 
      "name": "\u0645\u062d\u0645\u062f", 
      "first_name": "", 
      "last_name": "", 
      "nickname": "\u0645\u062d\u0645\u062f", 
      "url": "http:\/\/codesaz.com", 
      "description": "\u0627\u06cc\u0646 \u0632\u0646\u062f\u06af\u06cc \u0646\u0627\u0645\u0647 \u0645\u0646 \u0627\u0633\u062a", 
      "avatar": "76" 
     }, 
     "comments": [], 
     "attachments": [{ 
      "id": 86, 
      "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol119-024.jpg", 
      "slug": "wallpapersmania_vol119-024", 
      "title": "[WallpapersMania]_vol119-024", 
      "description": "", 
      "caption": "", 
      "parent": 85, 
      "mime_type": "image\/jpeg", 
      "images": { 
       "full": { 
        "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol119-024.jpg", 
        "width": 1680, 
        "height": 1050 
       }, 
       "thumbnail": { 
        "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol119-024-150x150.jpg", 
        "width": 150, 
        "height": 150 
       }, 
       "medium": { 
        "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol119-024-300x188.jpg", 
        "width": 300, 
        "height": 188 
       }, 
       "medium_large": { 
        "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol119-024-768x480.jpg", 
        "width": 768, 
        "height": 480 
       } 
      } 
     }], 
     "comment_count": 0, 
     "comment_status": "open", 
     "thumbnail": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol119-024-150x150.jpg", 
     "custom_fields": {}, 
     "thumbnail_size": "thumbnail", 
     "thumbnail_images": { 
      "full": { 
       "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol119-024.jpg", 
       "width": 1680, 
       "height": 1050 
      }, 
      "thumbnail": { 
       "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol119-024-150x150.jpg", 
       "width": 150, 
       "height": 150 
      }, 
      "medium": { 
       "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol119-024-300x188.jpg", 
       "width": 300, 
       "height": 188 
      }, 
      "medium_large": { 
       "url": "http:\/\/tellfa.com\/tafrihgah\/wp-content\/uploads\/2016\/04\/WallpapersMania_vol119-024-768x480.jpg", 
       "width": 768, 
       "height": 480 
      } 
     } 
    } 


答えて

2

public void setHasMore(boolean hasMore) { 
    this.hasMore = hasMore; 
} 

メソッドを追加してloadmoreのレイアウトを作成しますアクティビティレイアウトのプログレスバーとその可視性を消して、今度はあなたのloadMoreレイアウトのビジュアルをプログラム内でプログラムで可視にしますvoid onLoadMore(int current_page)metho listing_activity.xml - dと、あなたの活動のXMLファイルに(onResponseとONFAILURE方法で)あなたのWebサービスの応答に戻ってしまっへ

load_more.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/load_more" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#AA000000" 
    android:gravity="center" 
    android:visibility="gone" 
    android:padding="5dp"> 

    <ProgressBar 
     android:id="@+id/more_progress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_toRightOf="@+id/more_progress" 
     android:padding="5dp" 
     android:text="Loading results..." 
     android:textColor="#ffffff" 
     android:textSize="@dimen/medium_text_size" /> 

</RelativeLayout> 

それを設定するには、同じようload_more含ま

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

<RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_weight="1" 
       android:layout_height="match_parent"> 
       <android.support.v7.widget.RecyclerView 
        android:id="@+id/recycleView" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"/> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_centerInParent="true" 
        android:textSize="@dimen/medium_text_size" 
        android:gravity="center" 
        android:id="@+id/noListFound" 
        android:textColor="@color/orange" 
        android:text="No List found Please click here to add a new one" 
        android:visibility="gone" 
        android:padding="@dimen/header_margin"/> 
      </RelativeLayout> 

      <include layout="@layout/load_more"/> 
     </LinearLayout> 

BaseLoadMoreActivity.java

public abstract class BaseLoadMoreActivity extends Activity { 
    @BindView(R.id.recycleView) 
    RecyclerView recyclerView; 
    @BindView(R.id.load_more) 
    RelativeLayout loadMore; 
    private LinearLayoutManager ll; 
    private int page = 1; 
    private boolean isNoData = false; 
    private boolean isLoading = false; 
    private RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      if (dy > 0) //check for scroll down 
      { 
       int visibleItemCount = ll.getChildCount(); 
       int totalItemCount = ll.getItemCount(); 
       int pastVisiblesItems = ll.findFirstVisibleItemPosition(); 

       if (!isLoading && !isNoData) { 
        if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) { 
         loadMore.setVisibility(View.VISIBLE); 
         page++; 
         LoadMoreList(); 
         isLoading = true; 
        } 
       } 
      } 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ll = new LinearLayoutManager(this); 
     ll.setOrientation(LinearLayoutManager.VERTICAL); 
     recyclerView.setLayoutManager(ll); 
     recyclerView.addOnScrollListener(scrollListener); 

    } 

    public abstract void LoadMoreList(); 
} 

今BaseLoadMoreActivityであなたのcategory_page.javaを拡張し、コード

@Override 
    public void LoadMoreList() { 
     boolean isConnected = ConnectivityReceiver.isConnected(); 

     retrofitData(isConnected); 
    } 

private void retrofitData(boolean isConnect) { 

     if (isConnect) { 
      Retrofit_ApiInterface apiInterface = Retrofit_ApiClient.getClient().create(Retrofit_ApiInterface.class); 
      Call<R_CatModelResponse> call = apiInterface.getCatResponse(catID); 

      call.enqueue(new Callback<R_CatModelResponse>() { 
       @Override 
       public void onResponse(Call<R_CatModelResponse> call, Response<R_CatModelResponse> response) { 

        if (response != null) { 
         models = response.body().getCat_posts(); 

         mAdapter = new CategoryAdapter(context, cat_recyclerView, models); 
         cat_recyclerView.setAdapter(mAdapter); 
         loadMore.setVisibility(View.GONE); 
         isLoading = false; 

        } else { 
         loadMore.setVisibility(View.GONE); 
         isLoading = false; 

         Toast.makeText(Category_page.this, "Error 2", Toast.LENGTH_SHORT).show(); 
         TastyToast.makeText(context, "خطایی رخ داده است", TastyToast.LENGTH_LONG, TastyToast.ERROR); 
        } 

        checkNetLayout.setVisibility(View.GONE); 
       } 

       @Override 
       public void onFailure(Call<R_CatModelResponse> call, Throwable t) { 

        loadMore.setVisibility(View.GONE); 
         isLoading = false; 

        //TastyToast.makeText(context, "لطفا برنامه را مجددا باز کنید", TastyToast.LENGTH_LONG, TastyToast.ERROR); 
        Toast.makeText(Category_page.this, "Error 2", Toast.LENGTH_SHORT).show(); 
        //Cat_EmptyLayout.setVisibility(View.VISIBLE); 
        Log.e("CatResponseError", "Error : " + t); 

       } 
      }); 
     } else { 
      loadMore.setVisibility(View.GONE); 
         isLoading = false; 

      checkNetLayout.setVisibility(View.VISIBLE); 
      if (mAdapter != null) { 
       mAdapter.clear(); 
       cat_recyclerView.setAdapter(mAdapter); 
      } 
      categoryCheckNet_button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        loadData(); 
       } 
      }); 
     } 
    } 

を変更recycleViewを発見し、我々として category_page.javaからのレイアウトマネージャを設定するコードを削除してくださいBaseLoadMoreActivityでそれ以外のコードは動作しませんでした。

サンプル用のコードを提供しました。ちょっとあなたの助けをありがとう@Drilon、あなたのコードで私はレイアウトをロードするが、とき最後のポストが積載レイアウトを隠し、再び表示されません取得を示し

+0

私にコードを送ることはできますか? –

0

あなたは正しくgetItemViewTypegetItemCountを実装していませんでした:

@Override 
public int getItemViewType(int position) { 

    if (position < mDataSet.size()) { 
     return VIEW_ITEM; 
    } 

    return VIEW_PROG; 
} 

@Override 
public int getItemCount() { 
    return mDateSet.size() + 1; 
} 

さらにaddNewItem

EDITnotifyDataSetChanged();notifyItemRangeInserted(start + 1, end);を置き換えます アダプタのboolean private boolean hasMore = trueを維持し、このようなgetItemCount()を編集:

@Override 
public int getItemCount() { 
    if (hasMore) 
     return mDateSet.size() + 1; 
    else 
     return mDataSet.size(); 
} 

あなたは2例があります:あなたはあなたができる項目はもう存在しないことを以前の応答から知っている場合
1を読み込み、hasMore = falseを設定します。
2.あなたがそれを知らない場合は、onLoadMoreで応答が得られたら、response== null || response.body() == null || response.body().getCat_posts().size() == 0hasMore = falseと設定してください。
それはすべてあなたがサーバから取得応答
に依存編集
あなたのアダプタでonLoadMore

call.enqueue(new Callback<R_CatModelResponse>() { 
        @Override 
        public void onResponse(Call<R_CatModelResponse> call, Response<R_CatModelResponse> response) { 

         if (response != null) { 
          adapter.setHasMore(response.body().getPages() !=current_page+1) 
          mAdapter.addNewItem(response.body().getCat_posts()); 
          //loadLayout.setVisibility(View.GONE); 
         } else { 
          //loadLayout.setVisibility(View.VISIBLE); 
          Toast.makeText(Category_page.this, "Error 2", Toast.LENGTH_SHORT).show(); 
          TastyToast.makeText(context, "خطایی رخ داده است", TastyToast.LENGTH_LONG, TastyToast.ERROR); 
         } 
        } 

        @Override 
        public void onFailure(Call<R_CatModelResponse> call, Throwable t) { 

        } 
       }); 
+0

...それはあなたを助けることを願っています!ただし、最後の投稿を取得するとレイアウトを非表示にする必要があります。どのようにそれを修正するには?もう一度お手伝いしてください –

+0

もっと多くのアイテムをロードできるかどうかを示す応答がありますか? –

+0

いいえ!このコードをもう一度私に送ってもらえますか?私はアマチュアです、私の友人を助けてください –

関連する問題