Со вторым нажатием кнопки в appwidget? - PullRequest
0 голосов
/ 19 февраля 2012

Я разрабатываю виджет приложения, который запускает одно действие, которое меняет макет виджета приложения ... Когда я снова щелкаю по нему, мне бы хотелось, чтобы оно начало другое действие.Похоже, что общее мнение состоит в том, что вы не можете настроить двух слушателей на одну и ту же кнопку, но есть ли что-нибудь вокруг этого?Кто-нибудь может дать мне некоторую информацию о том, как это сделать или обойти это?

MyWidgetProvider.java

 public class MyWidgetProvider extends AppWidgetProvider 
 {

public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";
public static String ACTION_WIDGET_CLICK = "ActionReceiverClick";




public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[]   appWidgetIds) {


    RemoteViews remoteViews = new RemoteViews( context.getPackageName(), R.layout.hellowidget_layout );

    Intent configIntent = new Intent(context, second_activity2.class);
    configIntent.setAction(ACTION_WIDGET_CONFIGURE);
    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
    remoteViews.setOnClickPendingIntent(R.id.update, configPendingIntent);


    RemoteViews remoteViews1 = new RemoteViews( context.getPackageName(), R.layout.hellowidget_layout2 );

    configIntent = new Intent(context, second_activity3.class);
    configIntent.setAction(ACTION_WIDGET_CONFIGURE);
    configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
    remoteViews1.setOnClickPendingIntent(R.id.update2, configPendingIntent);

    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 
    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 

}
 }

и second_activity2.java

public class second_activity2 extends Activity
{


public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
@Override
public void onCreate( Bundle savedInstanceState ) 
{ 

    super.onCreate( savedInstanceState );
    setContentView( R.layout.main22 );
    getWindow().setWindowAnimations( 0 );


    Context context = this;
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.hellowidget_layout2);
    ComponentName thisWidget = new ComponentName(context, MyWidgetProvider.class);
    appWidgetManager.updateAppWidget(thisWidget, remoteViews);


    ComponentName locationReceiver1 = new ComponentName( second_activity2.this, SmsReceiver.class );
    PackageManager pm1 = getPackageManager();
    pm1.setComponentEnabledSetting( locationReceiver1, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP  );


    Toast toast = Toast.makeText( second_activity2.this, "Your incoming texts are now being blocked.", 3000 );
    toast.setGravity( Gravity.TOP, 0, 50 );
    toast.show();

     Intent i = new Intent();
        i.setAction(Intent.ACTION_MAIN);
        i.addCategory(Intent.CATEGORY_HOME);
        this.startActivity(i);


};

}

Любая помощьс благодарностьюСпасибо!

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

Я понял это.В то время как вы не можете на самом деле назначить другой прослушиватель щелчков для той же кнопки, вы можете указать намерение перейти к действию, которое настраивает его, а затем закрывает само.Как в этом примере:

public class MyWidgetProvider extends AppWidgetProvider 
{

public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";
public static String ACTION_WIDGET_CLICK = "ActionReceiverClick";


public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {


    RemoteViews remoteViews = new RemoteViews( context.getPackageName(), R.layout.hellowidget_layout );
    ComponentName thisWidget = new ComponentName(context, MyWidgetProvider.class);      

    Intent configIntent = new Intent(context, second_activity2.class);
    configIntent.setAction(ACTION_WIDGET_CONFIGURE);
    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
    remoteViews.setOnClickPendingIntent(R.id.update, configPendingIntent);


    appWidgetManager.updateAppWidget(thisWidget, remoteViews);

}
}

Затем в second_activity2.class напишите это после onCreate ()

Context context = this;
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.hellowidget_layout2);
    ComponentName thisWidget = new ComponentName(context, MyWidgetProvider.class);

    Intent configIntent = new Intent(context, second_activity3.class);
    configIntent.setAction(ACTION_WIDGET_CONFIGURE);
    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
    remoteViews.setOnClickPendingIntent(R.id.update2, configPendingIntent);

    appWidgetManager.updateAppWidget(thisWidget, remoteViews);
0 голосов
/ 19 февраля 2012
// Global to the AppWidget
int clickCount = 0;

// In onClick listener
clickCount++;
switch (clickCount) {
    case(1):
        // Start Activity 1
        break;
    case(2):
        // Start Activity 2
        break;
}

Или это слишком просто?

...