【问题标题】:Android: Update Widget From ActivityAndroid:从活动更新小部件
【发布时间】:2015-04-03 05:34:17
【问题描述】:

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

我创建了 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);
          }
}

--- 编辑活动 ---

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);
}
}

【问题讨论】:

    标签: android android-activity android-widget


    【解决方案1】:

    我不确定我是否正确地回答了你的问题,但让我们试试吧:

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

    android:onClick="myFunction"

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

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

    【讨论】:

    • 可能是我解释的不好,现在输入我的代码不起作用。
    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2014-06-11
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多