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

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

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

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

0回答

2855閲覧

Android スクロールしないListViewが重い

uhsi

総合スコア57

Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2019/08/16 09:48

編集2022/01/12 10:55

下記の方法でスクロールしないListViewを作成しましたが、リストの項目の追加に時間がかかってしまいます。解決策はあるのでしょうか。リストの項目の追加は以下のように行っています。
https://qiita.com/osamu1203/items/a5a0c89a0437a8a00ae5

XML

1<com.example.project.NonScrollListView 2 android:layout_marginTop="20dp" 3 android:id="@+id/listView" 4 android:layout_width="match_parent" 5 android:layout_height="wrap_content" 6 app:layout_constraintTop_toBottomOf="@id/linearLayout" />

Java

1//MainActivity.java 2ArrayList<ListRow> list = new ArrayList<ListRow>(); 3for (int i = 0 ; i<10 ; i++){ 4 list.add(new ListRow("abc","abc",10)); //わかりやすいようにabcというテキストに変更 5} 6ListView listView = findViewById(R.id.listView); 7listView.setAdapter(adapter); 8 9//ListRow.java 10 11package com.XXX; 12 13public class ListRow { 14 15 private String a; 16 private String b; 17 private int c; 18 19 public ListRow(String a, String b, int c) { 20 this.a = a; 21    //同様にb,c 22 } 23 24 25//getter setter 26} 27 28//MyAdapter 29 30package XXX; 31 32import //省略 33 34public class MyAdapter extends BaseAdapter { 35 private LayoutInflater layoutInflater = null; 36 private ArrayList<ListRow> rows; 37 public MyAdapter(Context context) { 38 this.layoutInflater = LayoutInflater.from(context); 39 } 40 public void setList(ArrayList<ListRow> rows) { 41 this.rows = rows; 42 } 43 @Override 44 public int getCount() { 45 return rows.size(); 46 } 47 @Override 48 public Object getItem(int i) { 49 return rows.get(i); 50 } 51 @Override 52 public long getItemId(int i) { 53 return i; 54 } 55 @Override 56 public View getView(int i, View view, ViewGroup viewGroup) { 57 view = layoutInflater.inflate(R.layout.list_layout, viewGroup, false); 58 ListRow row = rows.get(i); 59 ((TextView)view.findViewById(R.id.a)).setText(row.geta()); 60 ((TextView)view.findViewById(R.id.b)).setText(row.getb()); 61 if (row.getProgress()==100){ 62 ((TextView)view.findViewById(R.id.c)).setVisibility(INVISIBLE); 63 ((ProgressBar)view.findViewById(R.id.progressBar)).setVisibility(INVISIBLE); 64 ((CheckBox)view.findViewById(R.id.checkBox)).setChecked(true); 65 } else { 66 ((TextView)view.findViewById(R.id.c)).setText(row.getc()+"%"); 67 ((ProgressBar)view.findViewById(R.id.progressBar)).setProgress(row.getc()); 68 ((CheckBox)view.findViewById(R.id.checkBox)).setChecked(false); 69 } 70 return view; 71 } 72}

こちらの記事の「AdapterやLayoutを独自に実装」を参考にして作っていますので問題が発生するような特殊な方法は使っていないと思います。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/16 10:25

このソースだけだと、 - listが使われてない - result, text, adapterが突然でてくるため、何者か(何をしているか)わからない のですが、このあたりいかがでしょうか?
uhsi

2019/08/16 10:41

ありがとうございます。上記の方法だと表示がおそくなるという事例があればと思ったのですがそうではないのでしょうか。
退会済みユーザー

退会済みユーザー

2019/08/16 11:00

今書かれているソースだけだと、正直これが原因、というのは断言しづらいです。 事例とまでは言えないですが、例えばListViewに持っている項目の件数が多いとか、ListViewならではの原因があるかもしれません。または、項目の追加の方法によるかもしれません。 ただ、この段階では当てずっぽうでしか言えないので、原因をはっきり探るためにはもっと質問者さんからの情報が必要です。 なので、ある程度原因がわかってくるまでは、ソースとか、後はListViewのあるレイアウトファイルなどについて探りを入れる必要はあると思います。それで分かってくれば、回答もつけやすいかと思います。
jimbe

2019/08/16 15:20

これでは「車が遅いんだけど」とアクセルペダルの写真を見せられたようなものです. 出来れば「遅い」を再現出来るコード一式をご提示ください.
uhsi

2019/08/17 12:21

お二方ともご回答ありがとうございます。コードを記載しますのでアドバイスをいただけると助かります。
jimbe

2019/08/17 13:36

コードが断片で「遅い」を再現できないのですが, どこでどの程度(何秒)遅いのでしょうか. そして, R.layout.list_layout にはプログレスバーがあるようですが, これがずっと更新し続けていたりしないでしょうか.
jimbe

2019/08/17 13:42

ついでになりますが, getView の書き方には, 毎回 inflate するのを避けるためにビューホルダーを利用する方法があります. (RecyclerView の ViewHolder と同じです.) リンク先の記事では触れていませんが, 毎回 inflate するのは遅い原因の一つかと思いますので, ビューホルダーを使った構造の記事を探してみては如何でしょうか.
uhsi

2019/08/18 07:11

ありがとうございました。試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問