Widget中ListView上的项目不显示

Widget中ListView上的项目不显示

本文介绍了Widget中ListView上的项目不显示[Android]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的窗口小部件中创建一个ListView,并从Web服务获取结果.从Web服务获取结果没有任何问题,但是结果没有显示在我的ListView上,甚至每30分钟更新一次widgetupdatePeriodMillis也无法正常工作.

I create a ListView in my widget and getting the result from a web service. I don't have any problem in getting the result from the web service but the result is not displaying on my ListView and even updatePeriodMillis that updates the widget every 30 minutes is not working.

我正在跟踪此示例,并在其中添加了AsyncTask ListProvider类,我设法得到了结果,而不是使用populateListItem()这样的

I'm following this example and added AsyncTask in the ListProvider class, I managed to get the result and instead of using the populateListItem() where it is like this

 private void populateListItem() {
    for (int i = 0; i < 10; i++) {
        ListItem listItem = new ListItem();
        listItem.heading = "Heading" + i;
        listItem.content = i
                + " This is the content of the app widget listview.";
        listItemList.add(listItem);
    }
}

我在onPostExecute上的AsyncTask中使用下面的代码

I use the code below in my AsyncTask on onPostExecute

 public class ListProvider implements RemoteViewsFactory {

  private ArrayList<ListItem> listItemList = new ArrayList<ListItem>();

  public ListProvider(Context context, Intent intent) {
       new GetJSONWebService().execute();
  }

 class GetJSONWebService extends AsyncTask<Void, Void, String> {


 @Override
    protected String doInBackground(Void... params) {
        String str = null;

        try
        {
            HttpClient httpclient = new DefaultHttpClient();
            HttpGet httpget = new HttpGet(URL_STRING);
            HttpResponse response = httpclient.execute(httpget);
            str =  EntityUtils.toString(response.getEntity());
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return str;

    }

  @Override
    protected void onPostExecute(String result) {
    super.onPostExecute(result);

        try {

            JSONObject object = new JSONObject(result);
            JSONArray jArray  = object.getJSONArray("DATA");

            for (int i = 0, count = jArray.length(); i < count; i++) {
                try {
                    JSONObject jsonObject = jArray.getJSONObject(i);

                    ListItem listItem = new ListItem();

                        listItem.heading = jsonObject.getString("name").toString();
                        listItem.content = jsonObject.getString("description").toString();
                        listItemList.add(listItem);


                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }




        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 }

调试时,它会在我的listItemList上添加项目,但不会显示在我的小部件ListView上.我该如何解决?先感谢您.

When debugging, it adds the items on my listItemList but it doesn't display on my widget ListView. How can I solve this? Thank you in advance.

这是我的WidgetService

public class WidgetService extends RemoteViewsService {

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

这是我的AppWidgetProvider

  public class WidgetProvider extends AppWidgetProvider {

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

    final int N = appWidgetIds.length;
    for (int i = 0; i < N; ++i) {
        RemoteViews remoteViews = updateWidgetListView(context,
                appWidgetIds[i]);
        appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);

    }

    super.onUpdate(context, appWidgetManager, appWidgetIds);

}

 private RemoteViews updateWidgetListView(Context context, int appWidgetId) {

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
            R.layout.widget_layout);
    Intent svcIntent = new Intent(context, WidgetService.class);
    svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
   svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));

    remoteViews.setRemoteAdapter(appWidgetId, R.id.listViewWidget,
            svcIntent);

    remoteViews.setEmptyView(R.id.listViewWidget, R.id.empty_view);

  return remoteViews;
    }

推荐答案

我通过遵循我发现我的getCount总是返回0,因此我没有使用AsyncTask,而是将我的Web服务调用放在了onDataSetChanged()中.

I solve this by following the answer here I found out that my getCount always returns 0 and therefore instead of using AsyncTask I put my web service call in onDataSetChanged().

这篇关于Widget中ListView上的项目不显示[Android]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-31 01:46