我正在开发一个简单的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);
}
}
答案 0 :(得分:0)
我不确定我是否正确地提出了您的问题,但让我们试试:
您不需要启动另一个活动来更新您的字段,只需在XML对象中添加一个属性:
机器人:的onClick =" myFunction的"
在您的代码中,执行以下操作:
public void myFunction(View v){
//instantiate your object here and update the object
}