質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

解決済

RecyclerViewで画面に読み込む数を指定して表示したい

itouuuuuuuuu
itouuuuuuuuu

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

2回答

0評価

0クリップ

51閲覧

投稿2017/09/10 20:03

前提・実現したいこと

Retrofitを用いてサーバーから配列形式のjsonを受け取り、RecyclerViewでリスト状(StaggeredGridLayout)に表示しています。
この時、一度にすべての内容を表示するのではなく、「更に読み込み」のようなボタンを実装し、ボタンが押される度に一定数ずつリストを表示していきたいと考えています。

例えば、全体で20項目のリストの場合、

初期表示 5項目

「更に読み込み」ボタンをクリック

10項目表示

「更に読み込み」ボタンをクリック

15項目表示

「更に読み込み」ボタンをクリック

20項目表示

のような動きにしたいと考えています。

要望

一定数ずつリストを作成するという部分の処理がわからず、質問させていただきました。
ボタン追加やクリック時の処理は実装できるので、リストを一定数ずつ追加するという処理部分についてアドバイスいただけたらと思います。

よろしくお願いいたします。

コード

Adapter

java

public class TopicsRecyclerAdapter extends RecyclerView\.Adapter<TopicsRecyclerAdapter\.ViewHolder> { private List<Topic> mTopicList = new ArrayList<>\(\); private Context mContext; // ViewHolder class ViewHolder extends RecyclerView\.ViewHolder { @BindView\(R\.id\.topicImage\) ImageView mTopicImage; @BindView\(R\.id\.topicTitle\) TextView mTopicTitle; // ViewHolderのコンストラクタ private ViewHolder\(View v\) { super\(v\); // ButterKnifeのバインド ButterKnife\.bind\(this, v\); } } // コンストラクタ public TopicsRecyclerAdapter \(Context context, List<Topic> topicList\) { mTopicList = topicList; mContext = context; } // ViewHolder作成 @Override public TopicsRecyclerAdapter\.ViewHolder onCreateViewHolder\(final ViewGroup parent, int viewType\) { final View view = LayoutInflater\.from\(parent\.getContext\(\)\)\.inflate\(R\.layout\.item_topics, parent, false\); // ViewHolder作成 final TopicsRecyclerAdapter\.ViewHolder holder = new TopicsRecyclerAdapter\.ViewHolder\(view\); return holder; } // 画面に表示する内容をセット @Override public void onBindViewHolder\(TopicsRecyclerAdapter\.ViewHolder holder, int position\) { // 商品内容をViewHolderにセット Picasso\.with\(mContext\)\.load\(mTopicList\.get\(position\) // 記事画像 \.getImageInfoUrl\(\)\) \.into\(holder\.mTopicImage\); holder\.mTopicTitle\.setText\(mTopicList\.get\(position\)\.getTitle\(\)\); // 記事タイトル } @Override public int getItemCount\(\) { return mTopicList\.size\(\); } }

Fragment

java

public class TopicsFragment extends Fragment { private ApiInterface mApiInterface; private Call<List<Topic>> mCall; private Unbinder mUnbinder; private List<Topic> mResult; @BindView\(R\.id\.topicsRecyclerView\) RecyclerView mTopicsRecyclerView; // コンストラクタ public TopicsFragment\(\) { } public static TopicsFragment newInstance\(\) { TopicsFragment fragment = new TopicsFragment\(\); return fragment; } @Override public View onCreateView\(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState\) { // viewの取得 final View view = inflater\.inflate\(R\.layout\.fragment_topics, container, false\); // ButterKnifeのバインド mUnbinder = ButterKnife\.bind\(this, view\); // Retrofitの設定 Retrofit retrofit = new Retrofit\.Builder\(\) \.baseUrl\(ApiInterface\.END_POINT\) // エンドポイント \.addConverterFactory\(GsonConverterFactory\.create\(\)\) // json変換方法(gsonを使用に設定) \.build\(\); mApiInterface = retrofit\.create\(ApiInterface\.class\); // API呼び出し mCall = mApiInterface\.getTopics\(\); // 非同期でAPIサーバーからリストに情報を読み込む mCall\.enqueue\(loadFromApiToList\); return view; } private Callback<List<Topic>> loadFromApiToList = new Callback<List<Topic>>\(\) { @Override public void onResponse\(Call<List<Topic>> call, Response<List<Topic>> response\) { if \(response\.isSuccessful\(\)\) { mResult = response\.body\(\); // 2列のStaggeredGridLayoutで表示 mTopicsRecyclerView\.setLayoutManager\(new StaggeredGridLayoutManager\(2, StaggeredGridLayoutManager\.VERTICAL\)\); // アダプターを作成 TopicsRecyclerAdapter adapter = new TopicsRecyclerAdapter\(getContext\(\), mResult\); // アダプターをセット mTopicsRecyclerView\.setAdapter\(adapter\); } } @Override public void onFailure\(Call<List<Topic>> call, Throwable t\) { Log\.d\(TAG, "onFailure: " \+ t\.getCause\(\) \+ ", " \+ t\.getMessage\(\)\); t\.printStackTrace\(\); } }; @Override public void onDestroyView\(\) { super\.onDestroyView\(\); mUnbinder\.unbind\(\); } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

hiramekun
hiramekun

2017/09/11 22:47

apiからのレスポンスですが、ボタンを押した時は、「追加されるべき要素」のみが返ってきますか?それとも「今までの要素+追加されるべき要素」が返ってきますか?
itouuuuuuuuu
itouuuuuuuuu

2017/09/14 01:22

apiからは表示すべき全ての要素が配列で一度に返ってきます。mTopicListに全て格納されています。この様な場合は、徐々に表示していく実装は難しいのでしょうか?

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。