簡體   English   中英

如何在主屏幕小部件中使用按鈕(例如活動)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM