반응형
안드로이드 앱 위젯에서 AsyncTask를 이용해서 비동기로 이미지를 다운로드 받고 화면에 뿌려주는 예제다. 내가 처음부터 전부 다 만든 것은 아니고 구글링으로 찾은 아래 예제가 정상적으로 작동하지 않아 일부 코드를 수정했다.
https://blog.naver.com/cosmosjs/221299199145
버튼2는 잘 작동하는데 버튼1과 버튼3이 터치해도 반응이 없었다. 그래서 두 버튼의 onclick 리스너를 설정하는 코드를 기존 void updateAppWidget() 에서 void onUpdate() 내부로 옮겼다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// There may be multiple widgets active, so update all of them
for (int appWidgetId : appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.new_app_widget);
//버튼1 클릭 : 클릭 성공 메세지 출력!
remoteViews.setOnClickPendingIntent(R.id.button1, getPendingSelfIntent(context, ACTION_BUTTON1, PendingIntent.FLAG_CANCEL_CURRENT));
//버튼3 클릭 : 이미지뷰에 비트맵 이미지를 교체해준다.
remoteViews.setOnClickPendingIntent(R.id.button3, getPendingSelfIntent(context, ACTION_BUTTON3, PendingIntent.FLAG_UPDATE_CURRENT));
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
}
|
cs |
위 코드에서 호출하고 있는 getPendingSelfIntent() 메서드도 새로 작성했다.
1
2
3
4
5
|
protected PendingIntent getPendingSelfIntent(Context context, String action, int flag) {
Intent intent = new Intent(context, getClass());
intent.setAction(action);
return PendingIntent.getBroadcast(context, 0, intent, flag);
}
|
cs |
이렇게 수정하니 버튼1과 버튼3이 정상적으로 작동한다. 아래 스택오버플로우 게시글을 참고했다.
https://stackoverflow.com/questions/23220757/android-widget-onclick-listener-for-several-buttons
끝.
반응형
'개발 > Android' 카테고리의 다른 글
이클립스 DDMS에서 기기가 offline으로 뜰 때 해결 방법 (0) | 2013.03.15 |
---|---|
[Android] 디바이스 관련 오류 및 해결 방법 (0) | 2011.08.11 |
댓글