回答編集履歴

1

コード例を追加

2017/11/12 11:28

投稿

toris-birds
toris-birds

スコア122

test CHANGED
@@ -15,3 +15,113 @@
15
15
  interfaceを使った独自リスナーの作り方
16
16
 
17
17
  http://android-note.open-memo.net/sub/event__my_listener.html
18
+
19
+
20
+
21
+ ----
22
+
23
+ コード例: 書き方は色々あると思います。ビルドを通してないので、typo等あるかもしれません。
24
+
25
+
26
+
27
+ [呼び出し側]
28
+
29
+
30
+
31
+ ```
32
+
33
+ final MyListener listener = new MyListener() {
34
+
35
+ @Override
36
+
37
+ public void onMediaIdChanged(final long mediaID) {
38
+
39
+ // mediaIDを使う処理
40
+
41
+ }
42
+
43
+ }
44
+
45
+
46
+
47
+ twitterUploadImage(mTwitter, filepath, context, listener);
48
+
49
+
50
+
51
+ // まとめて twitterUploadImage(mTwitter, filepath, context, new MyListener() { ... }); と書くのも可
52
+
53
+
54
+
55
+ ```
56
+
57
+
58
+
59
+ [リスナ(名前は適当)]
60
+
61
+ ```
62
+
63
+ interface MyListener {
64
+
65
+ void onMediaIdChanged(final long mediaID)
66
+
67
+ }
68
+
69
+
70
+
71
+ ```
72
+
73
+
74
+
75
+ [呼ばれる側(改造版、抜粋)]
76
+
77
+ ```
78
+
79
+ // 戻り値の型 long を void に変更、引数 listener を追加
80
+
81
+ public void twitterUploadImage(final Twitter mTwitter, final String filepath, final Context context, final MyListener listener) {
82
+
83
+ AsyncTask<String, Void, Boolean> task = new AsyncTask<String, Void, Boolean>(){
84
+
85
+
86
+
87
+ @Override
88
+
89
+ protected Boolean doInBackground(String... strings) {
90
+
91
+ try {
92
+
93
+ //ここで画像をアップロード
94
+
95
+ media = mTwitter.uploadMedia(new File(filepath));
96
+
97
+ mediaID = media.getMediaId();
98
+
99
+ if (listener != null) {
100
+
101
+ listener.onMediaIdChanged(mediaID); // ここで返す
102
+
103
+ }
104
+
105
+ return true;
106
+
107
+ } catch (TwitterException e) {
108
+
109
+ e.printStackTrace();
110
+
111
+ return false;
112
+
113
+ }
114
+
115
+ }
116
+
117
+
118
+
119
+ // (省略)
120
+
121
+
122
+
123
+ // return mediaID; // ここではmediaIDを返さない
124
+
125
+ }
126
+
127
+ ```