gpt4 book ai didi

带有 ListView 的 Android Widget 仅显示加载 View

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:37:06 29 4
gpt4 key购买 nike

我正在尝试实现一个带有 ListView 的 Android App Widget。我开始遵循 Google 文档,但我被正在显示的加载 View 列表而不是正常的列表项卡住了。有人有使用小部件中的 ListView 的经验吗?

代码与Google docs中的相同.我使用 ListView 而不是 StackView 作为数据源,我使用数据库(这不是问题,数据是正确获取的 - 我已经尝试通过返回具有正确数据的普通列表项 View 而不是默认加载 View )

在互联网上搜索对我没有帮助...我也尝试了这个 tutorial但它也没有用。我希望任何人都可以帮助我,在此先感谢!

代码

WidgetProvider.java

public class WidgetProvider extends AppWidgetProvider {

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

for (int i = 0; i < appWidgetIds.length; i++) {

Intent intent = new Intent(context, EventWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));

RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget);
rv.setRemoteAdapter(android.R.id.list, intent);
rv.setEmptyView(android.R.id.list, R.id.tvEmptyList);

appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
}

super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}

WidgetService.java

public class EventWidgetService extends RemoteViewsService {

@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {

return new EventsWidgetListProvider(getApplicationContext(), intent);
}
}

WidgetListProvider

public class EventsWidgetListProvider implements RemoteViewsFactory {

private List<> _entities = new ArrayList<>();
private Context _context;
// private int _appWidgetId;

public EventsWidgetListProvider(Context context, Intent intent) {

_context = context;
// _appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
}

@Override
public void onCreate() { }

private void refreshEntities() {

// Request data from database
_entities = RequestResult;
}

@Override
public RemoteViews getViewAt(int position) {

final RemoteViews remoteViews = new RemoteViews(_context.getPackageName(), R.layout.list_row);

// Set data to remoteViews [remoteViews.setTextViewText(), remoteViews.setImageViewResource()]

return remoteViews;
}

@Override
public int getCount() {

return _entities.size();
}

@Override
public long getItemId(int position) {

return position;
}

@Override
public void onDataSetChanged() {

refreshEntities();
}

@Override
public void onDestroy() { }

@Override
public RemoteViews getLoadingView() {

return new RemoteViews(_context.getPackageName(), R.layout.widget_loading);
}

@Override
public int getViewTypeCount() {

return 0;
}

@Override
public boolean hasStableIds() {

return false;
}
}

最佳答案

您的 getViewTypeCount 返回 0。根据 documentation :

If the adapter always returns the same type of View for all items, this method should return 1.

通过返回 0,您告诉系统您没有要显示的 View 类型。

关于带有 ListView 的 Android Widget 仅显示加载 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26089235/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com