Android Widget実践---EverydayTips開発(2)

4317 ワード

昨日の続き
昨日実現したのは死んだwidget widgetで、情報を表示する役割のほかにユーザーと対話することです.これは私たちがしなければならないことです.
写真のように(录画のよくない)米工の何の更に言うようにしましょうほほほ
ちょっと面白かったかな?実は簡単です
まずWidgetにclickイベントを追加します.
package com.su.tipeveryday;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.provider.ContactsContract.CommonDataKinds.Note;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.TextView;
import android.widget.Toast;

public class TipEveryDayWidget extends AppWidgetProvider {

	@Override
	public void onDeleted(Context context, int[] appWidgetIds) {
		// TODO Auto-generated method stub
		super.onDeleted(context, appWidgetIds);
	}

	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {// widget       
		// TODO Auto-generated method stub
		super.onUpdate(context, appWidgetManager, appWidgetIds);

		// final int N = appWidgetIds.length;//    widget     ,    
		// Log.d("app", "onUpdate--->Ids===" + String.valueOf(N));
		// for (int i = 0; i < N; i++) {//        widget      (   id    )
		// int appWidgetId = appWidgetIds[i];
		// updateAppWidget(context, appWidgetManager, appWidgetId);//
		//   widget   
		// }
		
		updateAppWidget(context, appWidgetManager, appWidgetIds);//   widget   

	}

	private void updateAppWidget(Context context,
			AppWidgetManager appWidgetManager, int[] appWidgetIds) {
		// 1.1,     activity   intent

		RemoteViews views = new RemoteViews(context.getPackageName(),
				R.layout.widget_layout);
		String tip = Tips.getTips();//  Tips.java     
		views.setTextViewText(R.id.textViewWidget, tip);//   

		Intent intent = new Intent(context, TipEveryDayActivity.class);//          Activity 
		PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
				intent, 0);
		views.setOnClickPendingIntent(R.id.textViewWidget, pendingIntent);

		Intent intent2 = new Intent("com.su.ontipclick");//              ,      
		PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 0,
				intent2, 0);
		views.setOnClickPendingIntent(R.id.buttonChange, pendingIntent2);

		appWidgetManager.updateAppWidget(appWidgetIds, views);//  widget     

	}

	public void onReceive(Context context, Intent intent) {

		if (intent.getAction().equals("com.su.ontipclick")) {
			Toast.makeText(context, "OK!!!!!", Toast.LENGTH_LONG).show();//           
			RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
					R.layout.widget_layout);//            appwidget      
			String tip = Tips.getTips();//  Tips.java     
			remoteViews.setTextViewText(R.id.textViewWidget, tip);
			AppWidgetManager appWidgetManager = AppWidgetManager
					.getInstance(context);//   appwidget    ,    appwidget        
			ComponentName componentName = new ComponentName(context,
					TipEveryDayWidget.class);//              appwidget
			appWidgetManager.updateAppWidget(componentName, remoteViews);

		}
		super.onReceive(context, intent);
	}

}

widgetにイベントを登録するのは面倒ですが、実は暗黙的なintentを実現しているので、Manifestにこのintentを登録します.
  <receiver android:name=".TipEveryDayWidget" 
            android:label="AAAAAAAATip">
            <intent-filter >
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                <action android:name="com.su.ontipclick"></action><!--      -->
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_config" /><!--    widget     ,              copy -->
        </receiver>

そうそうJAvaは小さな処理をしました
package com.su.tipeveryday;

public class Tips {
	public static Boolean flagBoolean =true;
	public static String getTips() {
		
		if (flagBoolean) {
			flagBoolean = false;
			return "       ,       ";
		}
		else {
			flagBoolean=true;
			return "       ,       ";
			
		}
		
	}
}

分からないなら仕方ない