本帖最后由 swust_chenpeng 于 2011-12-15 19:00:44 编辑

解决方案 »

  1.   

    package visual.ui;import java.util.logging.Logger;import android.app.Activity;
    import android.appwidget.AppWidgetManager;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemSelectedListener;
    import android.widget.ArrayAdapter;
    import android.widget.Spinner;
    import android.widget.TextView;/**
     * 
     * @author visual
     * 
     */
    public class WeatherConfigure extends Activity { private String[] mCitys;
    private String[] mCitys_py;
    private Spinner mSpinner;
    private String mCurrentCity = "mianyang";
    private int mPosition = 0;
        private TextView mCityText;
    private boolean flag = false;
    int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; @Override
    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState); // Set the result to CANCELED. This will cause the widget host to cancel
    // out of the widget placement if they press the back button.
    setResult(RESULT_CANCELED); setContentView(R.layout.weather_configure); // Find the widget id from the intent.
    Intent intent = getIntent();
    Bundle extras = intent.getExtras();
    if (extras != null) {
    mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
    AppWidgetManager.INVALID_APPWIDGET_ID);
    } // If they gave us an intent without the widget id, just bail.
    if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
    finish();
    } mCitys = getResources().getStringArray(R.array.weather_city);
    mCitys_py = getResources().getStringArray(R.array.weather_citypy); mSpinner = (Spinner) findViewById(R.id.city_choose);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_spinner_item, mCitys); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mSpinner.setAdapter(adapter);
    mSpinner.setSelection(mPosition);
    mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override
    public void onItemSelected(AdapterView<?> parent, View view,
    int position, long id) {
    // TODO Auto-generated method stub
        if(!flag) {
         flag = true;
         return ;
        }
    mPosition = position;
    mCurrentCity = mCitys_py[position];
    AppWidgetManager appWidgetManager = AppWidgetManager
    .getInstance(WeatherConfigure.this);
                    
    Intent resultValue = new Intent();
                resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
    setResult(RESULT_OK,resultValue);
    finish();
    } @Override
    public void onNothingSelected(AdapterView<?> parent) {
    // TODO Auto-generated method stub }
    });
    }
    }
    代码...package visual.ui;import android.appwidget.AppWidgetManager;
    import android.appwidget.AppWidgetProvider;
    import android.content.Context;
    import android.content.Intent;
    import android.util.Log;//AppWidgetProvider 是 BroadcastReceiver 的子类,本质是个 广播接收器,
    //它专门用来接收来自 Widget组件的各种请求(用Intent传递过来),所以如果让我给他起名的话 
    //我会给他命名为AppWidgetReceiver,每一个Widget都要有一个AppWidgetProvider.public class HelloWidgetProvider extends AppWidgetProvider {
    // 每个请求都会传递给onReceive方法,该方法根据Intent参数中的action类型
    // 来决定自己处理还是分发给下面四个特殊的方法。
    @Override
    public void onReceive(Context context, Intent intent) {
    Log.i("yao", "HelloWidgetProvider --> onReceive");
    super.onReceive(context, intent);
    } // 如果Widget自动更新时间到了、或者其他会导致Widget发生变化的事件发生,
    // 或者说Intent的值是android.appwidget.action.APPWIDGET_UPDATE,那
    // 么会调用onUpdate,下面三个方法类似
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
    int[] appWidgetIds) {
    // AppWidgetManager 顾名思义是AppWidget的管理器,appWidgetIds
    // 桌面上所有的widget都会被分配一个唯一的ID标识,那么这个数组就是他们的列表
    Log.i("yao", "HelloWidgetProvider --> onUpdate");
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    } // 当一个App Widget从桌面上删除时调用
    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
    Log.i("yao", "HelloWidgetProvider --> onDeleted");
    super.onDeleted(context, appWidgetIds);
    } // 当这个App Widget第一次被放在桌面上时调用(同一个App Widget可以被放在桌面上多次,
    // 所以会有这个说法)
    @Override
    public void onEnabled(Context context) {
    Log.i("yao", "HelloWidgetProvider --> onEnabled");
    super.onEnabled(context);
    } // 当这个App Widget的最后一个实例被从桌面上移除时会调用该方法。
    @Override
    public void onDisabled(Context context) {
    Log.i("yao", "HelloWidgetProvider --> onDisabled");
    super.onDisabled(context);
    }}