2016-09-20 43 views
9

在我ListProvider类,它实现RemoteViewsFactory我已经推杆下面的下面的代码:打开活动它如何传递数据并从Widget中打开Activity? [Android]产品

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

我把记录在我的WidgetProvideronReceive它具有正确的ID当我点击,但经过在extras中没有正确的ID。有时间,它不打开我提供的Activity,只是打开我的MainActivity。当我从recently open app中删除我的应用程序然后使用widget时会发生这种情况。

这里是我的onReceive代码在我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); 

    } 

这就是我如何得到我的ID 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); 
    } 

如何解决这个问题?先谢谢你。

回答

3

我在我的onReceive里添加了setData(),我在那里传递数据。

@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

找到了它为什么崩溃,因为我的数据库它仍然不存在。因为我在我的SplashActivity

中创建我的数据库
相关问题