2013-01-02 49 views
7

Tôi đang cố gắng tạo tiện ích con android chứa danh sách các thành phần (tác vụ).Điền ListView trong tiện ích màn hình chính trong Android

Khi tôi đặt tiện ích trên màn hình chính, không có tác vụ nào được hiển thị.

Tôi không hiểu những gì còn thiếu.

Cảm ơn trước sự giúp đỡ của bạn.

Đây là xml cho widget_layout.xml tôi

<?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> 

Đây là cách bố trí cho các mục của 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" /> 

này được lớp widgetProvider tôi

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); 
    } 

} 
} 

Và đây là RemoteViewsFactory của tôi

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 chỉ trả về một thể hiện của nhà máy.

EDIT: tôi quên khai báo dịch vụ trong tệp kê khai; bây giờ tôi nhận được các phụ tùng đầy với số lượng chính xác của các mặt hàng, nhưng với thông điệp "tải" thay vì tên của mục tôi muốn hiển thị

Trả lời

6

giải quyết. Tôi đã làm theo ví dụ google của stackWidget, và họ sử dụng một cho trên mảng widgetIds, tăng thêm con trỏ int với ++ i, nó làm cho widget không hoạt động. Được sử dụng i + + và nó hoạt động

+0

Tôi đang gặp vấn đề tương tự. Tôi thấy số lượng các mục, nhưng tất cả đều nói "Đang tải ..." và tôi có vòng lặp for incrementing với i ++. –

+0

@KrisB Bạn đã giải quyết vấn đề của mình như thế nào. Tôi cũng vậy. – Payal

Các vấn đề liên quan