0

Я попытался изо всех сил следовать указателям на developer.android.com, но это не сработало. Я занимаюсь этим последние пару дней с нулевым прогрессом. Я знаю, что у меня глупая ошибка, но я не могу понять. После непрерывного ведения журнала я понимаю, что ни один из методов не реализован в моей реализации RemoteViewsFactory, который (пытается) установить ListView в виджет с данными из курсора поставщика контента.Ни один из методов в RemoteViewsFactory не вызван вообще.

RemoteViewsFactory:

private Context context; 
private int appWidgetId; 
private Cursor cursor; 

public FootballScoreFactory(Context context, Intent intent){ 
    this.context = context; 
    appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 

} 

@Override 
public void onDataSetChanged() { 

    if(cursor != null){ 
     cursor.close(); 
    } 

    String[] date = new String[1]; 
    Date filterDate = new Date(System.currentTimeMillis()); 
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
    date[0] = format.format(filterDate); 
    try { 
     cursor = context.getContentResolver().query(
       Uri.parse([content uri here, tested, returns the data]), 
       null, 
       null, 
       date, 
       null 
     ); 
    } catch (Exception e){ 
     e.printStackTrace(); 
    } 

} 
@Override 
public RemoteViews getViewAt(int position) { 

    String leagueName, home, away, homeGoal, awayGoal; 
    leagueName = home = away = homeGoal = awayGoal = ""; 

    if(cursor.moveToPosition(position)){ 
     leagueName = cursor.getString(cursor.getColumnIndex(DatabaseContract.scores_table.LEAGUE_COL)); 
     home = cursor.getString(cursor.getColumnIndex(DatabaseContract.scores_table.HOME_COL)); 
     away = cursor.getString(cursor.getColumnIndex(DatabaseContract.scores_table.AWAY_COL)); 
     homeGoal = String.valueOf(cursor.getInt(cursor.getColumnIndex(DatabaseContract.scores_table.HOME_GOALS_COL))); 
     awayGoal = String.valueOf(cursor.getInt(cursor.getColumnIndex(DatabaseContract.scores_table.AWAY_GOALS_COL))); 
    } 

    RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_list_item); 
    rv.setTextViewText(R.id.league_name, leagueName); 
    rv.setTextViewText(R.id.home, home); 
    rv.setTextViewText(R.id.away, away); 
    rv.setTextViewText(R.id.home_score, homeGoal.contentEquals("-1")? "-" : homeGoal); 
    rv.setTextViewText(R.id.away_score, awayGoal.contentEquals("-1")? "-" : awayGoal); 
    return rv; 
} 

RemoteViewsService:

@Override 
public RemoteViewsFactory onGetViewFactory(Intent intent) { 
    return new FootballScoreFactory(getApplicationContext(), intent); 
} 

AppWidgetProvider:

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    // There may be multiple widgets active, so update all of them 
    for (int appWidgetId : appWidgetIds) { 
     Intent intent = new Intent(context, FootballScoreService.class); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 

     RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.football_score); 
     rv.setRemoteAdapter(appWidgetId, R.id.widget_list_view, intent); 
     rv.setEmptyView(R.id.widget_list_view, R.id.empty_view); 

     appWidgetManager.updateAppWidget(appWidgetId, rv); 
    } 

    super.onUpdate(context, appWidgetManager, appWidgetIds); 

} 

Любая помощь, как к тому, что мне нужно сделать, чтобы убедиться, что мнения будут обновлены бы здорово. Если это помогает, то rv.setEmptyView(...); работает постоянно.

И самое большое горе, которое я получил в этом, когда я, хотя я НЕ привязывал взгляды в файле манифеста приложения, но похоже, что я это сделал. :(

<service android:name=".FootballScoreService" 
     android:permission="android.permission.BIND_REMOTEVIEWS" /> 

Спасибо заранее.

ответ

3

Таким образом, получается, я понял свою собственную проблему. Это было так просто, как мой RemoteViewsFactory не возвращает правильное значение для getViewTypeCount(). Я оставил его в 0 в первом. Когда я изменил его на 1, он работал.

Давай, смеяться надо мной. Я сделал. Надеюсь, что это помогает бедную единственную душу, как и я в какой-то момент.

я бы не стал удивляйся, если я споткнусь через это снова lol.