2016-09-20 5 views
9

मेरी ListProvider वर्ग कि RemoteViewsFactory मैं नीचे निम्नलिखित कोड putted है लागू करता है:डेटा कैसे पास करें और विजेट से गतिविधि कैसे खोलें? [एंड्रॉयड]

@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 यह सही आईडी है में लॉग डाल जब मैं क्लिक किया, लेकिन बाद गतिविधि इसे खोलने सही आईडी नहीं है जहां इसे extras में रखा गया है। समय भी है कि यह प्रदान किए गए Activity को नहीं खोलता है और बस अपना MainActivity खोलता है। ऐसा तब होता है जब मैंने अपना ऐप recently open app से हटा दिया और फिर widget का उपयोग किया।

यहाँ मेरी 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); 

    } 

में onReceive के लिए मेरे कोड है और यह है कि मैं कैसे में आईडी प्राप्त मेरी 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 में जोड़ा जहां मैं डेटा पास करता हूं।

@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

में अपना डेटाबेस बना रहा हूं
संबंधित मुद्दे