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?[安卓]
基础教程推荐
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01