teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

補足

2018/08/22 15:23

投稿

kakajika
kakajika

スコア3133

answer CHANGED
@@ -2,4 +2,35 @@
2
2
 
3
3
  まずはperformFilteringの中で呼んでいる `SelectActivity.resisterTargetList();` と `SelectActivity.checkUpdate();` を無くす方向で修正してください。publishResultsがフィルターした結果を元にUIを操作するためのメソッドなので、そちらの中に移せば意図する動作になると思います。
4
4
 
5
- 余談ですが、外部からアクセスできるようにするために変数やメソッドをstaticで宣言するのはオブジェクト指向の考え方に反するものであり、あまりオススメできません。(いわゆるstaticおじさんというやつです)そのあたりも修正しておいた方が今後バグを起こす可能性を減らせてよいと思います。
5
+ 余談ですが、外部からアクセスできるようにするために変数やメソッドをstaticで宣言するのはオブジェクト指向の考え方に反するものであり、あまりオススメできません。(いわゆるstaticおじさんというやつです)そのあたりも修正しておいた方が今後バグを起こす可能性を減らせてよいと思います。
6
+
7
+ **補足: staticを使わない方法について**
8
+
9
+ いくらかやり方はありますが、簡単なのはActivityの中でMyArrayAdapterを継承したクラスを作り、そこでFilterを実装するものです。
10
+
11
+ ```java
12
+ private void setList(){
13
+ MyArrayAdapter adapter = new MyArrayAdapter(...) {
14
+ private Filter filter = new Filter() {
15
+ @Override
16
+ protected FilterResults performFiltering(CharSequence constraint) {
17
+ ...
18
+ }
19
+
20
+ @Override
21
+ protected void publishResults(CharSequence constraint, FilterResults results) {
22
+ // ここならActiviyのメソッドが呼べる
23
+ }
24
+ };
25
+
26
+ @NotNull
27
+ @Override
28
+ public Filter getFilter() {
29
+ return filter;
30
+ }
31
+ };
32
+
33
+ ...
34
+ listView.setAdapter(adapter);
35
+ }
36
+ ```