How to pass data and open an Activity from Widget? [Android](如何从 Widget 传递数据并打开 Activity?[安卓])
问题描述
在实现 RemoteViewsFactory 的 ListProvider 类中,我将以下代码放在下面:
In my ListProvider class that implements RemoteViewsFactory I have putted the following code below:
@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;
}
我将日志放在 WidgetProvider 的 onReceive 中,当我单击它时它具有正确的 ID,但是在打开活动后它没有正确的 ID放入extras.有时它也不会打开我提供的Activity,而只是打开我的MainActivity.当我从 recently open app 中删除我的应用程序,然后使用 widget 时,就会发生这种情况.
I put Logs in my onReceive of WidgetProvider it has the correct ID when I clicked, but after opening the activity it doesn't have the correct ID where it is put in extras. There are time as well that it does not open the Activity I provided and just open my MainActivity. This happens when I removed my app from recently open app and then use the widget.
这是我的 WidgetProvider 中 onReceive 的代码
Here is my code for onReceive in my 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);
}
这就是我在 DetailsActivity 中获取 ID 的方式
And this is how I get the ID in my 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);
}
如何解决这个问题?提前谢谢你.
How to solve this? Thank you in advance.
推荐答案
我在传递数据的 onReceive 中添加了 setData().
I added setData() in my onReceive where I pass data.
@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);
}
}
但是我遇到了崩溃,如果我卸载应用程序然后安装并且没有先打开应用程序然后添加一个 widget 并单击 ListView.
But I encounter a crash, if I un-install the app and then install and doesn't open the app first then add a widget and click on the ListView.
找出它为什么会因为我的数据库而崩溃,但它仍然不存在.因为我在我的 SplashActivity
Found out why it crashes because of my database it still doesn't exist. Because I'm creating my database in my SplashActivity
这篇关于如何从 Widget 传递数据并打开 Activity?[安卓]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何从 Widget 传递数据并打开 Activity?[安卓]
基础教程推荐
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01
- 通过重定向链接在 Google Play 中打开应用 2022-01-01
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- 如何从 logcat 中删除旧数据? 2022-01-01
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01
- NSString intValue 不能用于检索电话号码 2022-01-01
