步驟二:點選 Appwidget 內的文字,以啟動另一個 Activity
步驟三:選擇其中一個項目
步驟四:將選擇的項目資料顯示於 AppWidget
步驟五:移除 AppWidget
<AppWidgetInvokeActivity.java>
1: package com.android.appwidgetinvokeactivity;
2:
3: import android.app.PendingIntent;
4: import android.app.Service;
5: import android.appwidget.AppWidgetManager;
6: import android.appwidget.AppWidgetProvider;
7: import android.content.ComponentName;
8: import android.content.Context;
9: import android.content.Intent;
10: import android.os.IBinder;
11: import android.widget.RemoteViews;
12:
13: public class AppWidgetInvokeActivity extends AppWidgetProvider {
14:
15: @Override
16: public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
17: super.onUpdate(context, appWidgetManager, appWidgetIds);
18:
19: // Start UpdateService Service
20: context.startService(new Intent(context, UpdateService.class));
21:
22: int appWidgetId = appWidgetIds[0];
23: Intent configIntent = new Intent(context, MyActivity.class);
24: PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
25: RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetlayout);
26: remoteViews.setOnClickPendingIntent(R.id.resultTextView, configPendingIntent);
27: appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
28: }
29:
30:
31: @Override
32: public void onDisabled(Context context) {
33: // 處理 AppWidget onDisabled 事件
34: // 當最後一個 AppWidget 被刪除時,會執行 onDisabled
35:
36: super.onDisabled(context);
37:
38: // 停止 UpdateService 服務
39: context.stopService(new Intent(context, UpdateService.class));
40:
41: android.os.Process.killProcess(android.os.Process.myPid());
42: }
43:
44:
45: public static class UpdateService extends Service {
46:
47: @Override
48: public IBinder onBind(Intent intent) {
49: // TODO Auto-generated method stub
50: return null;
51: }
52:
53: @Override
54: public void onStart(Intent intent, int startId) {
55: super.onStart(intent, startId);
56:
57: // 將 MyActivity 設定的 selectedItem 值,更新 AppWidget 內容值
58: RemoteViews updateViews = new RemoteViews(this.getPackageName(), R.layout.widgetlayout);
59: updateViews.setTextViewText(R.id.resultTextView, "點選這裡選擇設定項目"+"\n"+MyActivity.selectedItem);
60: ComponentName thisWidget = new ComponentName(this, AppWidgetInvokeActivity.class);
61: AppWidgetManager manager = AppWidgetManager.getInstance(this);
62: manager.updateAppWidget(thisWidget, updateViews);
63: }
64: }
65:
66: }
<MyActivity.java>
1: package com.android.appwidgetinvokeactivity;
2:
3: import android.app.Activity;
4: import android.content.Context;
5: import android.content.Intent;
6: import android.os.Bundle;
7: import android.view.View;
8: import android.widget.AdapterView;
9: import android.widget.ArrayAdapter;
10: import android.widget.ListAdapter;
11: import android.widget.ListView;
12: import android.widget.AdapterView.OnItemClickListener;
13:
14: public class MyActivity extends Activity {
15:
16: public static String selectedItem = "";
17: ListView listviewSourceFrom;
18: ListAdapter laSingleChoice;
19: static final String[] mSourceFrom = new String[] { "選擇項目-1",
20: "選擇項目-2",
21: "選擇項目-3" };
22:
23:
24: @Override
25: protected void onCreate(Bundle savedInstanceState) {
26: super.onCreate(savedInstanceState);
27: setContentView(R.layout.myactivitylayout);
28: findViews();
29: setListviewControls();
30: setListviewListener();
31: }
32:
33: private void findViews() {
34: listviewSourceFrom = (ListView) findViewById(R.id.sourcefromListview);
35: }
36:
37: private void setListviewControls() {
38: laSingleChoice = new ArrayAdapter<String>( this,
39: android.R.layout.simple_list_item_single_choice,
40: mSourceFrom);
41: listviewSourceFrom.setAdapter(laSingleChoice);
42: listviewSourceFrom.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
43: }
44:
45: private void setListviewListener() {
46: listviewSourceFrom.setOnItemClickListener(new OnItemClickListener() {
47: public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
48: selectedItem = "選擇了第 "+String.valueOf(arg2+1)+" 個項目";
49: final Context context = MyActivity.this;
50: context.startService(new Intent(context, AppWidgetInvokeActivity.UpdateService.class));
51: Intent resultValue = new Intent();
52: setResult(RESULT_OK, resultValue);
53: finish();
54: }
55: });
56: }
57:
58: }
<widgetlayout.xml>
1: <?xml version="1.0" encoding="utf-8"?>2: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"3: android:layout_width="wrap_content"4: android:layout_height="wrap_content"5: android:gravity="center"6: android:orientation="vertical" >7:
8: <TextView
9: android:id="@+id/resultTextView"10: android:layout_width="match_parent"11: android:layout_height="match_parent"12: android:background="@drawable/widget"13: android:gravity="center"14: android:text="@string/app_name"15: android:textColor="@android:color/black"16: android:textSize="12dp"17: android:typeface="serif" />18:
19: </LinearLayout>
<myactivitylayout.xml>
1: <?xml version="1.0" encoding="utf-8"?>
2: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3: android:id="@+id/LinearLayout1"
4: android:layout_width="match_parent"
5: android:layout_height="match_parent" >
6:
7: <ListView
8: android:id="@+id/sourcefromListview"
9: android:layout_width="match_parent"
10: android:layout_height="wrap_content"
11: android:drawSelectorOnTop="true" >
12:
13: </ListView>
14:
15: </LinearLayout>
<appwidget.xml>
1: <?xml version="1.0" encoding="utf-8"?>
2: <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
3: android:initialLayout="@layout/widgetlayout"
4: android:minWidth="176dp"
5: android:minHeight="72dp" >
6:
7: </appwidget-provider>
<AndroidManifest.xml>
1: <?xml version="1.0" encoding="utf-8"?>
2: <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3: package="com.android.appwidgetinvokeactivity"
4: android:versionCode="1"
5: android:versionName="1.0" >
6:
7: <uses-sdk android:minSdkVersion="8" />
8:
9: <application
10: android:icon="@drawable/ic_launcher"
11: android:label="@string/app_name" >
12: <receiver android:name="AppWidgetInvokeActivity" android:label="@string/app_name">
13: <intent-filter>
14: <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
15: </intent-filter>
16: <meta-data android:resource="@xml/appwidget" android:name="android.appwidget.provider"/>
17: </receiver>
18: <service android:name="AppWidgetInvokeActivity$UpdateService"/>
19: <activity android:name="MyActivity">
20: <intent-filter>
21: <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
22: </intent-filter>
23: </activity>
24: </application>
25:
26: </manifest>
沒有留言:
張貼留言