How to find which button was pressed in Android app widgets?

I want to create a simple application widget that has two text fields and two buttons for the previous / next. I find it difficult to handle button clicks in application widgets. Actually my wish is, if the user clicks on the previous button, I want to show the previous value, and if the user clicks the "Next" button, I want to show the next value from the database. How to find out which button is pressed? here I register a button to listen to by pressing a button

  public static class UpdateWidgetService extends IntentService {

    public UpdateWidgetService() {
        super("UpdateWidgetService");

    }

    @Override
    protected void onHandleIntent(Intent intent) {
        AppWidgetManager appWidgetManager = AppWidgetManager
                .getInstance(this);

        int incomingAppWidgetId = intent.getIntExtra(EXTRA_APPWIDGET_ID,
                INVALID_APPWIDGET_ID);
        if (incomingAppWidgetId != INVALID_APPWIDGET_ID) {
            updateOneAppWidget(appWidgetManager, incomingAppWidgetId);

        }

    }


    private void updateOneAppWidget(AppWidgetManager appWidgetManager,
            int appWidgetId) {
        DatabaseManager dbManager = new DatabaseManager(this);

        dbManager.open();
        String contactNumber, date, status, message;
        ArrayList<QueuedMessage> listOfQuedMessage =        (ArrayList<QueuedMessage>) dbManager
                .fetchContactNumber();
        if (listOfQuedMessage.size() == 0)
            Log.i("Db", "null");
        else{
        date = dbManager.fetchDate();
        message = dbManager.fetchMessage();
        status = dbManager.fetchStatus();

        dbManager.closeDatabase();

        RemoteViews views = new RemoteViews(this.getPackageName(),
                R.layout.schdulesms_appwidget_layout);
        views.setTextViewText(R.id.to_appwidget_saved_data,
                listOfQuedMessage.get(count).contacNumber);
        views.setTextViewText(R.id.date_appwidget_saved_data, date);
        views.setTextViewText(R.id.status_appwidget_saved, status);
        views.setTextViewText(R.id.message_appwidgset_saved_data, message);

                    **//here i want do**
                   if(button1){
               btnNxtClick(views, appWidgetId,listOfQuedMessage.size());
                    }else{
                 btPrevClick(views, appWidgetId, listOfQuedMessage.size());
                    }

        appWidgetManager.updateAppWidget(appWidgetId, views);
        }

    }

    private void btnNxtClick(RemoteViews views, int appWidgetId,int sizeOfList) {
        Intent btnNextIntent = new Intent(this, this.getClass());
        btnNextIntent.putExtra(EXTRA_APPWIDGET_ID, appWidgetId);
        PendingIntent btnNextPendingIntent = PendingIntent.getService(this,
                0, btnNextIntent,    PendingIntent.FLAG_UPDATE_CURRENT);
        views.setOnClickPendingIntent(R.id.btnNext, btnNextPendingIntent);

    }
    private void btPrevClick(RemoteViews views, int appWidgetId,int sizeOfList) {
        Intent btnNextIntent = new Intent(this, this.getClass());
        btnNextIntent.putExtra(EXTRA_APPWIDGET_ID, appWidgetId);
        PendingIntent btnNextPendingIntent = PendingIntent.getService(this,
                0, btnNextIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        views.setOnClickPendingIntent(R.id.btnPrev, btnNextPendingIntent);

    }

}

can someone help me solve this problem? thank

0
source share
1 answer

Know which button is pressed, follow these steps:

1: btnNext btnPrev

 <intent-filter >
 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
 <action android:name="com.app.example.MyWidget.ACTION_WIDGET_CLICK_NEXT"/>
 <action android:name="com.app.example.MyWidget.ACTION_WIDGET_CLICK_PREV"/>
 </intent-filter>

2: btnNext btnPrev:

public class MyWidget extends AppWidgetProvider {
public static String ACTION_WIDGET_CLICK_NEXT = "Action_nextbtn";
public static String ACTION_WIDGET_CLICK_PREV = "Action_prevbtn";
}

3: onReceive

@Override
        public void onReceive(Context paramContext, Intent paramIntent)
        {
          String str = paramIntent.getAction();
            if (paramIntent.getAction().equals(ACTION_WIDGET_CLICK_NEXT)) {
                updateWidgetState(paramContext, str);   
            }
            if (paramIntent.getAction().equals(ACTION_WIDGET_CLICK_PREV)) {
                updateWidgetState(paramContext, str);   
            }
        }

4: :

static void updateWidgetState(Context paramContext, String paramString)
          {
            RemoteViews localRemoteViews = buildUpdate(paramContext, paramString);
            ComponentName localComponentName = new ComponentName(paramContext, MyWidget.class);
            AppWidgetManager.getInstance(paramContext).updateAppWidget(localComponentName, localRemoteViews);
          }

5:

private static RemoteViews buildUpdate(Context paramContext, String paramString)
          {

            rview = new RemoteViews(paramContext.getPackageName(), R.layout.widget_layout);
            Intent activebtnnext = new Intent(paramContext, MyWidget.class);
            active.setAction(ACTION_WIDGET_CLICK_NEXT);
            PendingIntent configPendingIntentnext = PendingIntent.getBroadcast(paramContext, 0, activebtnnext , 0);
            rmViews.setOnClickPendingIntent(R.id.btnNext, configPendingIntentnext);

            Intent activeprevbtn = new Intent(paramContext, MyWidget.class);
            active.setAction(ACTION_WIDGET_CLICK_PREV);
            PendingIntent configPendingIntentprev = PendingIntent.getBroadcast(paramContext, 0, activeprevbtn , 0);
            rmViews.setOnClickPendingIntent(R.id.btnprev, configPendingIntentprev);
            if(parmString.equals(ACTION_WIDGET_CLICK_NEXT))
            {

             //

            }  
            if(parmString.equals(ACTION_WIDGET_CLICK_PREV))
            {

             //

            }           
             return rview; 
          }
+7

All Articles