[英]how use button in homescreen widget like an activity
我有一個帶有按鈕,文本視圖和數據庫的小部件。 數據庫中已經有一些數據,當我單擊按鈕時,textView顯示數據庫中的第一個數據。我想更改文本視圖並顯示下一個數據,例如我的數據庫是這樣的:
{(id=1,name="First")(id=2,name="second")(id=3,name="third")}
textview="First"
點擊按鈕后
textview="second"
這是我的代碼
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
for(int i=0;i<appWidgetIds.length;i++){
int appWidgetId=appWidgetIds[i];
ArrayList<String> list = new ArrayList<String>();
DataBaseHelper db = new DataBaseHelper(context);
RemoteViews(context.getPackageName(),R.layout.activity_main);
RemoteViews rmtview = new RemoteViews(context.getPackageName(),R.layout.widget);
list=db.getData(1);
String s=list.get(GET)
list=db.getData(1);
rmtview.setTextViewText(R.id.textView1, s);
db.close();
編輯:
應用提供商
public class widget extends AppWidgetProvider {
public static String MyACTION = "MyAction";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
remoteViews.setOnClickPendingIntent(R.id.button3, buildButtonPendingIntent(context));
for(int i=0;i<appWidgetIds.length;i++){
int appWidgetId=appWidgetIds[i];
ArrayList<String> list = new ArrayList<String>();
DataBaseHelper db = new DataBaseHelper(context);
RemoteViews rmtview = new RemoteViews(context.getPackageName(),R.layout.widget);
list=db.getData(1);
String s=list.get(0);
rmtview.setTextViewText(R.id.textView1, s);
db.close();
///////////////////////
///////////////////////
appWidgetManager.updateAppWidget(appWidgetId, rmtview);
// RemoteViews un = new RemoteViews(context.getPackageName(),R.layout.widget);
}
}
public static PendingIntent buildButtonPendingIntent(Context context) {
Log.d("me","pending entent launched");
Intent intent = new Intent();
intent.setAction("pl.looksok.intent.action.CHANGE_TEXT");
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
public static void pushWidgetUpdate(Context context, RemoteViews remoteViews) {
ComponentName myWidget = new ComponentName(context,
widget.class);
Log.d("me","push launched");
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(myWidget, remoteViews);
}
}
MyWidgetIntentReceiver.java
public class MyWidgetIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("me", "OnRecive ...");
if(intent.getAction().equals("pl.looksok.intent.action.CHANGE_TEXT")){
updateWidgetPictureAndButtonListener(context);
}
}
public static void updateWidgetPictureAndButtonListener(Context context) {
Log.d("me", "update widget... ");
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
// ..Get Text from DB
//
remoteViews.setTextViewText(R.id.textView1, "...text");
//REMEMBER TO ALWAYS REFRESH YOUR BUTTON CLICK LISTENERS!!!
remoteViews.setOnClickPendingIntent(R.id.button3, widget.buildButtonPendingIntent(context));
widget.pushWidgetUpdate(context.getApplicationContext(), remoteViews);
}
}
EDIT2
我刪除了所有東西
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget);
remoteViews.setOnClickPendingIntent(R.id.button3, buildButtonPendingIntent(context));
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}
您需要在Button click事件上實現廣播接收器。 單擊按鈕時。 它將廣播並接收該動作。 在廣播接收器中實現從數據庫獲取數據。
檢查此教程 。
放
onUpdate()
{
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetview);
remoteViews.setOnClickPendingIntent(R.id.toggleButton1, buildButtonPendingIntent(context));
}
public static PendingIntent buildButtonPendingIntent(Context context) {
Intent intent = new Intent();
intent.setAction("pl.looksok.intent.action.CHANGE_TEXT");
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
編輯
public static void pushWidgetUpdate(Context context, RemoteViews remoteViews) {
ComponentName myWidget = new ComponentName(context, MyWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(myWidget, remoteViews);
}
現在,在清單中注冊
<receiver
android:name=".MyWidgetIntentReceiver"
android:label="widgetBroadcastReceiver" >
<intent-filter>
<action android:name="pl.looksok.intent.action.CHANGE_TEXT" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/demo_widget_provider" />
</receiver>
現在是MyWidgetIntentReceiver
public class MyWidgetIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("pl.looksok.intent.action.CHANGE_TEXT")){
updateWidgetPictureAndButtonListener(context);
}
}
public static void updateWidgetPictureAndButtonListener(Context context) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetview);
// ..Get Text from DB
//
remoteViews.setTextViewText(R.id.widgettext, "...text");
//REMEMBER TO ALWAYS REFRESH YOUR BUTTON CLICK LISTENERS!!!
remoteViews.setOnClickPendingIntent(R.id.toggleButton1, MyWidgetProvider.buildButtonPendingIntent(context));
MyWidgetProvider.pushWidgetUpdate(context.getApplicationContext(), remoteViews);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.