android - 如何找到在android中的应用程序小部件中单击了哪个按钮?

标签 android

我想设计一个简单的应用程序小部件,它有两个 TextView 和两个用于上一个/下一个的按钮。我越来越难以处理应用程序小部件中的按钮单击。实际上我的愿望是,如果用户单击上一个按钮我想显示以前的值,如果用户单击下一步按钮我想显示数据库中的下一个值。如何知道点击了哪个按钮? 在这里我像这样注册按钮点击监听器

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

    }

}

谁能帮我解决这个问题??谢谢

最佳答案

知道点击了哪个按钮,请按照以下步骤操作:

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

关于android - 如何找到在android中的应用程序小部件中单击了哪个按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10100217/

相关文章:

java - 将 ListView 放入 Horizo​​ntalScrollView 的最佳方法是什么?

java - 如何从 Firebase 实时数据库的推送方法中删除自动生成的项目

android - 使用 ActionBar 旋转 Android 的双 fragment

android - ScrollView 中的 LinearLayout

android - 在 (Sherlock)DialogFragment 中调用 startActivity(intentServiceIntent) 会导致 ActivityNotFoundException

android - Canvas 旋转后更改 RectF 的坐标

android - CardView onTouch onClick

android - 版本代码/版本名称错误

android - 如何在不启动模拟器的情况下要求qt为android创建apk包

java - 找不到 DownloadManager 下载的文件