如何在android主屏幕listview小部件中加载项目?
我目前正在开发一个Android项目,它使用一个主屏幕小部件向用户显示数据。我在小部件中使用的视图是一个如何在android主屏幕listview小部件中加载项目?,android,listview,listviewitem,android-appwidget,homescreen,Android,Listview,Listviewitem,Android Appwidget,Homescreen,我目前正在开发一个Android项目,它使用一个主屏幕小部件向用户显示数据。我在小部件中使用的视图是一个列表视图。以下是我的代码: WidgetService类 public class WidgetService extends RemoteViewsService { @Override public RemoteViewsFactory onGetViewFactory(Intent intent) { return (new WidgetR
列表视图
。以下是我的代码:
WidgetService类
public class WidgetService extends RemoteViewsService
{
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent)
{
return (new WidgetRemoteViewsFactory(this.getApplicationContext(), intent));
}
}
public class WidgetProvider extends AppWidgetProvider
{
@Override
public void onDeleted(Context context, int[] appWidgetIds)
{
super.onDeleted(context, appWidgetIds);
}
@Override
public void onDisabled(Context context)
{
super.onDisabled(context);
}
@Override
public void onEnabled(Context context)
{
super.onEnabled(context);
}
@Override
public void onReceive(Context context, Intent intent)
{
super.onReceive(context, intent);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds)
{
for(int i=0;i<appWidgetIds.length;i++)
{
RemoteViews rv = new RemoteViews(context.getPackageName(),
R.layout.widget);
Intent intent = new Intent(context, WidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
appWidgetIds[i]);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
rv.setRemoteAdapter(R.id.widgetListView, intent);
appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
public class WidgetRemoteViewsFactory implements RemoteViewsFactory
{
private Context context = null;
private int appWidgetId;
private List<String> widgetList = new ArrayList<String>();
private DBHelper dbhelper;
public WidgetRemoteViewsFactory(Context context, Intent intent)
{
this.context = context;
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
Log.d("AppWidgetId", String.valueOf(appWidgetId));
dbhelper = new DBHelper(this.context);
}
private void updateWidgetListView()
{
String[] widgetFruitsArray = dbhelper.retrieveFruitsList();
List<String> convertedToList = new ArrayList<String>(Arrays.asList(widgetFruitsArray));
this.widgetList = convertedToList;
}
@Override
public int getCount()
{
return widgetList.size();
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public RemoteViews getLoadingView()
{
// TODO Auto-generated method stub
return null;
}
@Override
public RemoteViews getViewAt(int position)
{
Log.d("WidgetCreatingView", "WidgetCreatingView");
RemoteViews remoteView = new RemoteViews(context.getPackageName(),
R.layout.listview_row_item);
Log.d("Loading", widgetList.get(position));
remoteView.setTextViewText(R.id.listTV, widgetList.get(position));
return remoteView;
}
@Override
public int getViewTypeCount()
{
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean hasStableIds()
{
// TODO Auto-generated method stub
return false;
}
@Override
public void onCreate()
{
// TODO Auto-generated method stub
updateWidgetListView();
}
@Override
public void onDataSetChanged()
{
// TODO Auto-generated method stub
updateWidgetListView();
}
@Override
public void onDestroy()
{
// TODO Auto-generated method stub
widgetList.clear();
dbhelper.close();
}
}
WidgetProvider类
public class WidgetService extends RemoteViewsService
{
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent)
{
return (new WidgetRemoteViewsFactory(this.getApplicationContext(), intent));
}
}
public class WidgetProvider extends AppWidgetProvider
{
@Override
public void onDeleted(Context context, int[] appWidgetIds)
{
super.onDeleted(context, appWidgetIds);
}
@Override
public void onDisabled(Context context)
{
super.onDisabled(context);
}
@Override
public void onEnabled(Context context)
{
super.onEnabled(context);
}
@Override
public void onReceive(Context context, Intent intent)
{
super.onReceive(context, intent);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds)
{
for(int i=0;i<appWidgetIds.length;i++)
{
RemoteViews rv = new RemoteViews(context.getPackageName(),
R.layout.widget);
Intent intent = new Intent(context, WidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
appWidgetIds[i]);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
rv.setRemoteAdapter(R.id.widgetListView, intent);
appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
public class WidgetRemoteViewsFactory implements RemoteViewsFactory
{
private Context context = null;
private int appWidgetId;
private List<String> widgetList = new ArrayList<String>();
private DBHelper dbhelper;
public WidgetRemoteViewsFactory(Context context, Intent intent)
{
this.context = context;
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
Log.d("AppWidgetId", String.valueOf(appWidgetId));
dbhelper = new DBHelper(this.context);
}
private void updateWidgetListView()
{
String[] widgetFruitsArray = dbhelper.retrieveFruitsList();
List<String> convertedToList = new ArrayList<String>(Arrays.asList(widgetFruitsArray));
this.widgetList = convertedToList;
}
@Override
public int getCount()
{
return widgetList.size();
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public RemoteViews getLoadingView()
{
// TODO Auto-generated method stub
return null;
}
@Override
public RemoteViews getViewAt(int position)
{
Log.d("WidgetCreatingView", "WidgetCreatingView");
RemoteViews remoteView = new RemoteViews(context.getPackageName(),
R.layout.listview_row_item);
Log.d("Loading", widgetList.get(position));
remoteView.setTextViewText(R.id.listTV, widgetList.get(position));
return remoteView;
}
@Override
public int getViewTypeCount()
{
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean hasStableIds()
{
// TODO Auto-generated method stub
return false;
}
@Override
public void onCreate()
{
// TODO Auto-generated method stub
updateWidgetListView();
}
@Override
public void onDataSetChanged()
{
// TODO Auto-generated method stub
updateWidgetListView();
}
@Override
public void onDestroy()
{
// TODO Auto-generated method stub
widgetList.clear();
dbhelper.close();
}
}
公共类WidgetProvider扩展了AppWidgetProvider
{
@凌驾
已删除公共void(上下文,int[]AppWidgetId)
{
super.ondeletted(上下文,appWidgetIds);
}
@凌驾
已禁用公共无效(上下文)
{
super.onDisabled(上下文);
}
@凌驾
公共void已启用(上下文)
{
super.onEnabled(上下文);
}
@凌驾
公共void onReceive(上下文、意图)
{
super.onReceive(上下文、意图);
}
@凌驾
public void onUpdate(上下文上下文,AppWidgetManager AppWidgetManager,
int[]appWidgetIds)
{
对于(int i=0;i我发现了这个问题。结果是,我需要返回getViewTypeCount()中的视图数,其中我的大小写为1
在我的WidgetRemoteViewsFactory类中。嗨,我也遇到了同样的问题。如果你有解决方案,你能帮助我吗。你能给我发送这个和ho的运行代码,让kist项目可以点击吗?如果你有解决方案,请帮助我。我有同样的问题,我们的代码几乎相同,但我从web服务。我将我的getViewTypeCount
也设置为返回1,但我的ListView
仍然不显示项目。你能帮我吗?谢谢。