2013-01-02 9 views
7

Öğelerin bir listesini (görevler) içeren bir android parçacığı oluşturmaya çalışıyorum.Android'de ana ekran widget'ında ListView'i doldurma

Widget'ı ana ekrana yerleştirdiğimde boş, hiç kimse görüntülenmiyor.

Eksik olanı anlamıyorum.

Yardımlarınız için şimdiden teşekkür ederiz. İşte

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@drawable/widget_background" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/title" 
    style="@android:style/TextAppearance.Medium" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:layout_margin="4dip" 
    android:gravity="center_horizontal" 
    android:text="@+string/TASK_LIST_ACT" > 
</TextView> 

<ListView 
    android:id="@+id/list" 
    style="@android:style/TextAppearance.Medium" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
</ListView> 

Bu ListView

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/widget_element" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:minHeight="?android:attr/listPreferredItemHeight" /> 

ait öğeler için düzen Bu benim widgetProvider sınıf olduğunu benim widget_layout.xml için xml olan

package it.geotask.android.widget; 

import it.geotask.android.R; 
import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.widget.RemoteViews; 

public class TaskWidgetProvider extends AppWidgetProvider { 

public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds) { 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 

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

     Intent intent = new Intent(context, GeotaskRemoteViewService.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_layout); 

     rv.setRemoteAdapter(appWidgetIds[i], R.id.list, intent); 

     rv.setEmptyView(R.id.list, R.id.empty_view); 
     appWidgetManager.updateAppWidget(appWidgetIds[i], rv); 
    } 

} 
} 

Bu da benim RemoteViewsFactory

package it.geotask.android.widget; 

import it.geotask.android.R; 
import it.geotask.android.dto.Task; 
import it.geotask.android.service.TaskService; 

import java.util.ArrayList; 
import java.util.List; 

import android.appwidget.AppWidgetManager; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.RemoteViews; 
import android.widget.RemoteViewsService; 

public class GeoTaskRemoteViewsFactory implements 
    RemoteViewsService.RemoteViewsFactory { 

private Context context = null; 
private int appWidgetId; 

private List<Task> taskList = new ArrayList<Task>(); 

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


} 

public int getCount() { 
    return taskList.size(); 
} 

public long getItemId(int position) { 
    return taskList.get(position).getId(); 
} 

public RemoteViews getLoadingView() { 
    // TODO Auto-generated method stub 
    return null; 
} 

public RemoteViews getViewAt(int position) { 
    RemoteViews row = new RemoteViews(context.getPackageName(), 
      R.layout.row); 

    row.setTextViewText(android.R.id.text1, taskList.get(position) 
      .getName()); 


    return (row); 
} 

public int getViewTypeCount() { 
    // TODO Auto-generated method stub 
    return 0; 
} 

public boolean hasStableIds() { 
    // TODO Auto-generated method stub 
    return false; 
} 

public void onCreate() { 
    taskList = TaskService.getTaskInStateList(context, context 
      .getResources().getString(R.string.DB_STATE_ACTIVE)); 
    taskList.addAll(TaskService.getTaskInStateList(context, context 
      .getResources().getString(R.string.DB_STATE_IN_RANGE))); 
    taskList.addAll(TaskService.getTaskInStateList(context, context 
      .getResources().getString(R.string.DB_STATE_DELAYED))); 

} 

public void onDataSetChanged() { 
    // TODO Auto-generated method stub 

} 

public void onDestroy() { 
    // TODO Auto-generated method stub 

} 

} 

remoteViewsService basitçe fabrikanın bir örneğini döndürür.

EDIT: Bildirimde hizmeti bildirmeyi unuttum; Şimdi widget doğru sayıda öğe ile doldurulur, ancak öğe adı yerine yerine "yükleme" mesajı ile görüntülemek istiyorum

cevap

6

Çözüldü. StackWidget'ın google örneğini izliyordum ve onlar da, i ile imleci artırarak, widget'ın çalışmamasına neden oluyor. Kullanılan i ++ ve çalışır

+0

Aynı sorunu yaşıyorum. Öğelerin sayısını görüyorum, ama hepsi "Yükleniyor ..." diyorlar ve i ++ ile döngü için artırım var. –

+0

@KrisB Sorununuzu nasıl çözdünüz? Ben aynı şeyi alıyorum. – Payal

İlgili konular