Android:从活动更新小部件

时间:2015-02-03 21:10:06

标签: android android-activity android-widget

我正在开发一个简单的stickynote应用程序,但我在管理小部件时遇到了问题。

我创建了WidgetProvider班级(AppWidgetProvider)和EditWidget班级(Activity)来编辑文字。

如何点击窗口小部件并在输入文本后使用文本更新窗口小部件时,如何打开EditWidget活动?

创建的每个小部件都有不同的文本,然后每个小部件都是唯一的。

开发此应用程序的最佳解决方案是什么?

我的代码是:

--- WidgetProvider ---

public class WidgetProvider extends AppWidgetProvider {
@Override
          public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
            for (int appWidgetId : appWidgetIds) {
                RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
                Intent intent = new Intent(context, EditActivity.class);
                intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);                  
                PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                views.setOnClickPendingIntent(R.id.update, pendingIntent);
                views.setTextViewText(R.id.update, "Click for insert text"
                appWidgetManager.updateAppWidget(appWidgetId, views);
            }
            super.onUpdate(context, appWidgetManager, appWidgetIds);
          }
}

--- EditActivity ---

public class EditActivity extends Activity {

EditText edt_txt;
int appWidgetId;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.edit_layout);

    edt_txt = (EditText) findViewById(R.id.edt_txt);    

    Intent launchIntent = getIntent();
    Bundle extras = launchIntent.getExtras();
    appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.save) {        

        String s = String.valueOf(edt_txt.getText());

        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this.getApplicationContext());
        RemoteViews views = new RemoteViews(this.getPackageName(), R.layout.widget_layout);
          Intent clickIntent = new Intent(this.getApplicationContext(), WidgetProvider.class);
          clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
          PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), appWidgetId, clickIntent, 0);
          views.setOnClickPendingIntent(R.id.update, pendingIntent);
          views.setTextViewText(R.id.update, s);
          appWidgetManager.updateAppWidget(appWidgetId, views);

        finish();
    }
return super.onOptionsItemSelected(item);
}
}

1 个答案:

答案 0 :(得分:0)

我不确定我是否正确地提出了您的问题,但让我们试试:

您不需要启动另一个活动来更新您的字段,只需在XML对象中添加一个属性:

机器人:的onClick =" myFunction的"

在您的代码中,执行以下操作:

public void myFunction(View v){
//instantiate your object here and update the object
}