¿Cómo pasar datos y abrir una Actividad de Widget?
En mi clase ListProvider
que implementa RemoteViewsFactory
he puesto el siguiente código a continuación:
@Override public RemoteViews getViewAt(int position) { RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.list_row); rv.setTextViewText(R.id.heading, merch_name); rv.setTextViewText(R.id.content, teaser); Bundle extras = new Bundle(); extras.putInt(WidgetProvider.EXTRA_ITEM, position); extras.putString(WidgetProvider.MERCHANT_ITEM, mWidgetItems.get(position).merchant_id); Intent fillInIntent = new Intent(); fillInIntent.putExtras(extras); rv.setOnClickFillInIntent(R.id.llRow, fillInIntent); return rv; }
Puse Logs en mi onReceive
de WidgetProvider
tiene el ID correcto cuando hice clic, pero después de abrir la actividad no tiene el ID correcto donde se pone en extras
. También hay tiempo para que no abra la Activity
que proporcioné y simplemente abra mi MainActivity
. Esto ocurre cuando he eliminado mi aplicación de la aplicación recently open app
y, a continuación, utilizar el widget
.
Aquí está mi código para onReceive
en mi WidgetProvider
public class WidgetProvider extends AppWidgetProvider { public static final String TOAST_ACTION = "my.packagename.TOAST_ACTION"; public static final String MERCHANT_ITEM = "my.packagename.MERCHANT_ITEM"; @Override public void onReceive(Context context, Intent intent) { AppWidgetManager mgr = AppWidgetManager.getInstance(context); if (intent.getAction().equals(TOAST_ACTION)) { int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); Intent goToDetails = new Intent(context, DetailsActivity.class); goToDetails.putExtra(Constants.MERCHANT_ID, intent.getStringExtra(MERCHANT_ITEM) ); goToDetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(goToDetails); super.onReceive(context, intent); }
Y así es como obtengo el ID en mi DetailsActivity
public class DetailsActivity extends Activity { String merchantID; @Override protected void onCreate(Bundle savedState) { super.onCreate(savedState); setContentView(R.layout.detailsactivity); Bundle extras = getIntent().getExtras(); if (extras != null) { merchantID = extras.getString(Constants.MERCHANT_ID); }
¿Cómo resolver esto? Gracias de antemano.
setData()
en mi onReceive
donde paso datos.
@Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); if (intent.getAction().equals(TOAST_ACTION)) { int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); Intent goToDetails = new Intent(context, DetailsActivity.class); goToDetails.putExtra(Constants.MERCHANT_ID, intent.getStringExtra(MERCHANT_ITEM) ); goToDetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); goToDetails.setData(Uri.parse(goToDetails.toUri(Intent.URI_INTENT_SCHEME))); context.startActivity(goToDetails); } }
Pero me encuentro con un accidente, si desinstalar la aplicación y luego instalar y no abrir la aplicación primero, a continuación, agregue un widget
y haga clic en el ListView
.
Descubrió por qué se bloquea debido a mi base de datos que todavía no existe. Porque estoy creando mi base de datos en mi SplashActivity