2

I have a widget with button , text View and DataBase. the data base already have some data the textView show the first data from database when I click on the button I want the text view changed and show the next data for example my DB is like this :

          {(id=1,name="First")(id=2,name="second")(id=3,name="third")}

        textview="First"

after click on button

       textview="second"

this is my code

@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();

EDIT:

appwidet provider

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

I removed every things

    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);
}
4

1 回答 1

1

You need to implement Broadcast receiver on Button click event. when Button will be click. it will broadcast & receiver catch this action. Implement your get data from DB in Broadcast Receiver.

Check this Tutorial .

Put

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);
    }

EDIT

 public static void pushWidgetUpdate(Context context, RemoteViews remoteViews) {
            ComponentName myWidget = new ComponentName(context, MyWidgetProvider.class);
            AppWidgetManager manager = AppWidgetManager.getInstance(context);
            manager.updateAppWidget(myWidget, remoteViews);     
        }

Now , Register it in manifest

 <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>

Now 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);

    }
}
于 2013-09-20T05:08:46.910 回答