2016-05-08 15 views
0

1つのウェブサイトのAndroidアプリケーションを開発したい。私はjsonからのウェブサイトの投稿を読んで、RecyclerViewに10回ごとに投稿し、ユーザーがRecyclerViewをスクロールすると10件以上の投稿が表示され、終了します。このプロジェクトで私はokHTTP v3RecyclerViewを使用します!私は最初の10件の記事を読み込むことができJSON LINK
AndroidでRecyclerViewのJsonからさらにデータをロード

:JSONリンク

public class ServerIP_cat { 
    private static String IP = "http://tellfa.com/tafrihgah/?json=get_category_posts&"; 

    public static String getCatIP() { 
     return IP; 
    } 
} 

My活動コード:

public class Category_page extends AppCompatActivity { 

    private static final long RIPPLE_DURATION = 250; 
    private Toolbar toolbar; 
    private TextView toolbar_title; 
    private ImageView toolbar_menuImage; 
    private RelativeLayout root; 
    private MainAdapter_loadMore mAdapter; 
    private RecyclerView cat_recyclerView; 
    private List<MainDataModel> dataModels = new ArrayList<MainDataModel>(); 
    private LinearLayoutManager mLayoutManager; 
    private RelativeLayout loadLayout; 
    private String catTitle = "", catID = ""; 
    private Bundle bundle; 
    private int pageCount = 1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.category_page); 
     //if (!EventBus.getDefault().isRegistered(this)) { 
     // EventBus.getDefault().register(this); 
     //} 

     // Initializing 
     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); 
     mAdapter = new MainAdapter_loadMore(this, cat_recyclerView, dataModels); 
     // Toolbar 
     setSupportActionBar(toolbar); 
     if (toolbar != null) { 
      getSupportActionBar().setTitle(""); 
     } 

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

     // 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.setAdapter(mAdapter); 
     // Load More data 
     mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() { 
      @Override 
      public void onLoadMore() { 
       dataModels.add(null); 
       mAdapter.notifyItemInserted(dataModels.size() - 1); 
       LoadMoreData(catID, pageCount); 
      } 
     }); 
    } 

    @Subscribe 
    public void onEvent(List<MainDataModel> mainInfoModels) { 
     if (dataModels.size() > 0) { 
      dataModels.remove(dataModels.size() - 1); 
      mAdapter.notifyItemRemoved(dataModels.size()); 
      mAdapter.setLoaded(); 
     } 

     mAdapter.add(mainInfoModels); 
     mAdapter.notifyDataSetChanged(); 
     pageCount++; 

     if (dataModels.isEmpty()) { 
      cat_recyclerView.setVisibility(View.GONE); 
      loadLayout.setVisibility(View.VISIBLE); 

     } else { 
      cat_recyclerView.setVisibility(View.VISIBLE); 
      loadLayout.setVisibility(View.GONE); 
     } 
    } 

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

    private void LoadData(String CatID) { 
     CatDataInfo catDataInfo = new CatDataInfo(); 
     catDataInfo.getCatDataInfo(this, CatID); 
    } 

    private void LoadMoreData(String CatID, int pageNumber) { 
     CatDataInfo_loadMore catDataInfo_loadMore = new CatDataInfo_loadMore(); 
     catDataInfo_loadMore.getCatDataInfo_loadMore(this, CatID, pageNumber); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     EventBus.getDefault().register(this); 
    } 

    @Override 
    public void onPause() { 
     EventBus.getDefault().unregister(this); 
     super.onPause(); 
    } 
} 

AsynTaskクラス:

ショーに、次の10ポスト

SERVERIPクラスをスクロールしたとき、私はしたいです

アダプタクラス:

public class MainAdapter_loadMore extends RecyclerView.Adapter { 

    private List<MainDataModel> 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 = 7; 
    private int lastVisibleItem, totalItemCount; 
    private boolean loading; 
    private OnLoadMoreListener onLoadMoreListener; 

    public MainAdapter_loadMore(Context context, RecyclerView recyclerView, List<MainDataModel> 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, 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()) 
        .placeholder(R.drawable.post_image) 
        .crossFade() 
        .into(((DataViewHolder) holder).main_post_image); 

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

      ((DataViewHolder) holder).main_dateTime.setText(Html.fromHtml(mDateSet.get(position).getDateTime())); 

      ((DataViewHolder) holder).main_author.setText(Html.fromHtml(mDateSet.get(position).getAuthor())); 

      ((DataViewHolder) holder).main_category.setText(Html.fromHtml(mDateSet.get(position).getCategory())); 
      ((DataViewHolder) holder).main_category.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        int pos = holder.getPosition(); 
        MainDataModel model = mDateSet.get(pos); 
        v.getContext().startActivity(new Intent(v.getContext(), Category_page.class) 
          .putExtra("categoryTitle", model.getCategory()) 
          .putExtra("categoryID", model.getCategoryID())); 
       } 
      }); 

      ((DataViewHolder) holder).main_post_image.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        int pos = holder.getPosition(); 
        MainDataModel 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.getDateTime()) 
          .putExtra("author", model.getAuthor()) 
          .putExtra("category", model.getCategory())); 

       } 
      }); 

     } 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 add(List<MainDataModel> models) { 
     mDateSet.addAll(models); 
     notifyDataSetChanged(); 
    } 

    public void update(List<MainDataModel> 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); 
     } 
    } 
} 

私はAdapter Classから区分を取得し、putExtraでこれを渡します。ポスト、ショーの次の10件の記事にスクロールしたとき、私はこのバグを修正し、どうすればよいOnLoadMoreListener

:私はインターフェイスクラスを使用する負荷より多くのデータのための


注意:マイナスポイントを与えないでください、私を助けてください、私は本当にあなたが助けてくれる必要があります!ありがとうすべて< 3どうすれば修正できますか?

答えて

0

私の問題が見つかりました!しかし、私の問題は変です!私はこのコードを削除します:

mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() { 
    @Override 
    public void onLoadMore() { 
     dataModels.add(null); 
     mAdapter.notifyItemInserted(dataModels.size() - 1); 
     LoadMoreData(catID, pageCount); 
    } 
}); 

これをもう一度書き換えて、私の問題を解決してください!!!!それは非常に奇妙です:D。
お手伝いがあります

関連する問題