回答編集履歴
1
補足
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
|
+
```
|