일반적인 activity 에서는
Button btn 이라는 객체를 생성하여
button = (Button)findviewbyId(R.id.블라블라);
와 같은 형태로 생성하여
button.setonclickLisnter 를 하지않습니까?
하지만 저는 appwidgetprovider 에서
버튼 이벤트 처리를 하고싶은데
appwidgetprovider에서는 findviewbyId 메소드를 사용할 수 없더군요
어떻게 해야 버튼 이벤트를 처리할 수 있을지 고수님들 답변부탁드립니다!
간단한 소스 몇줄 올려드려요 참고하세요. 저도 이때문에 고생좀 했네요.
public class LottoActivity extends AppWidgetProvider {
public static final String ACTION_LOTTO = "lkm.lotto.LottoActivity.ACTION_LOTTO";
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
final int N = appWidgetIds.length;
for(int i=0; i<N; i++){
int widgetID = appWidgetIds[i];
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
PendingIntent update = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_LOTTO), PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.update_btn, update); //버튼 이벤트
appWidgetManager.updateAppWidget(widgetID, views);
}
}
@Override
public void onReceive(Context context, Intent intent) {
Log.e("KENJI", "ggggggggggggggggg");
String action = intent.getAction();
p(action.toString());
if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {
}else if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
}else if (AppWidgetManager.ACTION_APPWIDGET_ENABLED.equals(action)) {
}else if (AppWidgetManager.ACTION_APPWIDGET_DISABLED.equals(action)) {
}
if(intent.getAction().equals(ACTION_LOTTO)){
//위젯에서 버튼을 누르게되면 여길타요
Toast.makeText(context, "테스트중입니다.", Toast.LENGTH_SHORT).show();
}
super.onReceive(context, intent);
}
public void p(String msg){
Log.d("", "lkm ------------>" + msg);
}
}




앱위젯은 RemoteViews를 사용하죠. 앱위젯의 클릭이벤트는 remoteView.setOnClickPendingIntent 를 사용합니다.