おそらく
mProgressDialog.show();
でプログレスが表示されて
//リスト更新
で時間が掛かっている間プログレスが表示されていて処理が終わったらプログレスのダイアログを閉じる…とされたいのだと思いますが。
android は UI スレッドという単一のスレッドがアプリ全体の処理を行っていることはご理解されているでしょうか。
https://developer.android.com/guide/components/processes-and-threads?hl=ja#Threads
ダイアログ等の表示処理は実際には UI スレッドへの通知(処理要求)であって、実行したら即表示されるものではありません。
また View の操作によるイベントの発火もまた UI スレッドが処理していて、その場合イベントの処理が終わらない限り UI スレッドは次の処理は出来ません。
従って、もし SearchData の呼び出しがボタン操作等によるイベント処理メソッドからであれば、まさしく UI スレッド上で動いている状態であり、ダイアログの表示の要求は SearchData が終わらなければ実行されないことになります。
SearchData は表示・処理の後にダイアログを閉じるまで行っていますから、 SearchData が終わってダイアログを表示後即閉じとなり、結局何も起きていないような状態になるでしょう。
表ではプログレスが動き裏では更新処理が動くようにするというのであれば、マルチスレッドにする必要があると思います。
(参考にされた情報がどのようなものだったのかが気になります。)
取り合えずテキトウに想像しました。
(なお、ダイアログでプログレスを表示することはユーザが他の操作をすることを出来なくしてしまう可能性があるため推奨されません。)
MainActivity.java
java
1import androidx.appcompat.app.AppCompatActivity;
2
3import android.app.Dialog;
4import android.os.*;
5import android.view.*;
6import android.widget.*;
7
8import java.time.*;
9import java.util.*;
10import java.util.function.*;
11
12public class MainActivity extends AppCompatActivity {
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_main);
17
18 ListView listView = findViewById(R.id.list_view);
19 Adapter adapter = new Adapter();
20 listView.setAdapter(adapter);
21
22 EditText searchCodeEdit = findViewById(R.id.search_code);
23 Button searchButton = findViewById(R.id.search_button);
24 searchButton.setOnClickListener(e -> {
25 String storeCode = searchCodeEdit.getText().toString();
26 new AsyncProgressDialog<>(null, ()->getData(storeCode), adapter::setItemList).show();
27 });
28 }
29
30 //時間のかかる処理を模倣
31 private List<Item> getData(String storeCode) {
32 String date = LocalDateTime.now().toString();
33 int max = new Random().nextInt(10) + 3; //テキトウな数のデータを用意する
34 List<Item> list = new ArrayList<>();
35 for(int i=0; i<max; i++) {
36 if(i != 0) {
37 try {
38 Thread.sleep(500); //[ms]
39 } catch(InterruptedException e) {
40 break; //中止
41 }
42 }
43 list.add(new Item(storeCode, (i+1)+" : "+date));
44 }
45 return list;
46 }
47
48 private class AsyncProgressDialog<E> extends Dialog {
49 AsyncProgressDialog(Runnable pre, Supplier<E> back, Consumer<E> post) {
50 super(MainActivity.this);
51 setContentView(R.layout.dialog_progress);
52
53 setOnShowListener(d -> {
54 if(pre != null) {
55 try {
56 pre.run();
57 } catch(Throwable t) {
58 dismiss();
59 throw t;
60 }
61 }
62 new Thread(() -> {
63 try {
64 E v = back.get();
65 runOnUiThread(() -> {
66 try {
67 if(post != null) post.accept(v);
68 } finally {
69 dismiss();
70 }
71 });
72 } catch(Throwable t) {
73 runOnUiThread(() -> dismiss());
74 throw t;
75 }
76 }).start();
77 });
78 }
79 }
80
81 private static class Item {
82 final String code, text;
83 Item(String code, String text) {
84 this.code = code;
85 this.text = text;
86 }
87 }
88
89 private static class Adapter extends BaseAdapter {
90 private List<Item> itemList = new ArrayList<>();
91 private Comparator<Item> itemComparator = Comparator.comparing(a -> a.code);
92
93 void setItemList(List<Item> itemList) {
94 this.itemList = new ArrayList<>(itemList); //防御コピー
95 Collections.sort(itemList, itemComparator);
96 notifyDataSetChanged();
97 }
98
99 @Override
100 public int getCount() {
101 return itemList.size();
102 }
103
104 @Override
105 public Object getItem(int position) {
106 return itemList.get(position);
107 }
108
109 @Override
110 public long getItemId(int position) {
111 return 0;
112 }
113
114 @Override
115 public View getView(int position, View convertView, ViewGroup parent) {
116 ViewHolder vh = convertView == null ? new ViewHolder(parent) : (ViewHolder)convertView.getTag();
117 vh.bind(itemList.get(position));
118 return vh.itemView;
119 }
120
121 private static class ViewHolder {
122 final View itemView;
123 private TextView text1, text2;
124
125 ViewHolder(ViewGroup parent) {
126 itemView = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_2, parent, false);
127 itemView.setTag(this);
128 text1 = itemView.findViewById(android.R.id.text1);
129 text2 = itemView.findViewById(android.R.id.text2);
130 }
131
132 void bind(Item item) {
133 text1.setText(item.code);
134 text2.setText(item.text);
135 }
136 }
137 }
138}
layout/activity_main.xml
xml
1<?xml version="1.0" encoding="utf-8"?>
2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools"
5 android:layout_width="match_parent"
6 android:layout_height="match_parent"
7 tools:context=".MainActivity">
8
9 <TextView
10 android:id="@+id/search_code_label"
11 android:layout_width="0dp"
12 android:layout_height="wrap_content"
13 android:text="CODE:"
14 app:layout_constraintStart_toStartOf="parent"
15 app:layout_constraintBaseline_toBaselineOf="@id/search_code" />
16 <EditText
17 android:id="@+id/search_code"
18 android:layout_width="0dp"
19 android:layout_height="wrap_content"
20 app:layout_constraintEnd_toEndOf="parent"
21 app:layout_constraintStart_toEndOf="@id/search_code_label"
22 app:layout_constraintTop_toTopOf="parent" />
23 <Button
24 android:id="@+id/search_button"
25 android:layout_width="wrap_content"
26 android:layout_height="wrap_content"
27 android:text="search"
28 app:layout_constraintEnd_toEndOf="parent"
29 app:layout_constraintTop_toBottomOf="@id/search_code" />
30
31 <ListView
32 android:id="@+id/list_view"
33 android:layout_width="0dp"
34 android:layout_height="0dp"
35 android:background="#d0ffff"
36 app:layout_constraintBottom_toBottomOf="parent"
37 app:layout_constraintEnd_toEndOf="parent"
38 app:layout_constraintStart_toStartOf="parent"
39 app:layout_constraintTop_toBottomOf="@id/search_button" />
40</androidx.constraintlayout.widget.ConstraintLayout>
layout/dialog_progress.xml
xml
1<?xml version="1.0" encoding="utf-8"?>
2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 xmlns:app="http://schemas.android.com/apk/res-auto">
6
7 <ProgressBar
8 android:layout_width="wrap_content"
9 android:layout_height="wrap_content"
10 app:layout_constraintBottom_toBottomOf="parent"
11 app:layout_constraintEnd_toEndOf="parent"
12 app:layout_constraintStart_toStartOf="parent"
13 app:layout_constraintTop_toTopOf="parent" />
14</androidx.constraintlayout.widget.ConstraintLayout>