Android Can';t在AppWidget中的GridView中更新ProgressBar

Android Can';t在AppWidget中的GridView中更新ProgressBar,android,gridview,android-appwidget,android-remoteview,Android,Gridview,Android Appwidget,Android Remoteview,我正在为Android开发AppWidget。我在AppWidget上有一个GridView,在GridView的每一项中我都有一个ProgressBarr。这个ProgressBar应该实时更新(因为我希望看到它从左到右进行)。不幸的是,我的代码“一个线程”正在这样做,但并不准确。当我向下或向上滚动时,我可以看到变化,否则一切就像小部件上的停止一样。我已经尝试在它工作的线程中更新小部件。我可以看到现场进展,但我这里还有一个问题。问题是,每个项目都在整个屏幕上展开,一个接一个地迭代,并在Prog

我正在为Android开发AppWidget。我在AppWidget上有一个GridView,在GridView的每一项中我都有一个ProgressBarr。这个ProgressBar应该实时更新(因为我希望看到它从左到右进行)。不幸的是,我的代码“一个线程”正在这样做,但并不准确。当我向下或向上滚动时,我可以看到变化,否则一切就像小部件上的停止一样。我已经尝试在它工作的线程中更新小部件。我可以看到现场进展,但我这里还有一个问题。问题是,每个项目都在整个屏幕上展开,一个接一个地迭代,并在ProgressBar上显示进度。我已经在代码中进行了注释,在代码中我更新了小部件并遇到了问题。有什么需要帮忙的吗?我会感谢你的

这是当我在主屏幕上拖动我的小部件时的屏幕截图,然后我可以看到我的GridView

然后,updateWidget调用我的小部件的原因如下所示。它正在更新进度条,但我不想这样。它应该在progressBarr中更新,如上所示。它不是在这些gridview项目中进行操作,而是在小部件上展开项目,然后开始在小部件上迭代项目,并保持更新。

这是两个不同的项目

我的密码是

public class ListProvider implements RemoteViewsFactory {
private ArrayList<ListItem> listItemList = new ArrayList<ListItem>();
private Context context = null;
private int appWidgetId;
private int mProgressStatus = 0;
AppWidgetManager appWidgetManager ;
private Handler mHandler = new Handler();


public ListProvider(Context context, Intent intent,
        ArrayList<ListItem> listItems) {
    this.context = context;

    appWidgetManager = AppWidgetManager.getInstance(context);
    appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
            AppWidgetManager.INVALID_APPWIDGET_ID);
    if (listItems != null)
        this.listItemList = (ArrayList<ListItem>) listItems.clone();

}

@Override
public int getCount() {
    return listItemList.size();
}

@Override
public long getItemId(int position) {
    return position;
}

/*
 * Similar to getView of Adapter where instead of View return RemoteViews
 * And using the saved ImagePath to show images on ImageView
 */
@Override
public RemoteViews getViewAt(final int position) {
    final RemoteViews remoteView = new RemoteViews(
            context.getPackageName(), R.layout.list_row);
    final ListItem listItem = listItemList.get(position);
    remoteView.setTextViewText(R.id.heading, (listItem.heading).toUpperCase());

    remoteView.setViewVisibility(R.id.ProgressTime, View.VISIBLE);
    remoteView.setProgressBar(R.id.ProgressTime, 100, mProgressStatus, false);


    Thread worker = new Thread(new Runnable() {

        @Override
        public void run() {
            mProgressStatus=0;
            while(mProgressStatus<100){
                mProgressStatus = mProgressStatus+3;
                try {
                    Thread.sleep(2011);
                } catch (InterruptedException e) {

                    e.printStackTrace();
                }
                mHandler.post(new Runnable() {
                    public void run() {
                        remoteView.setProgressBar(R.id.ProgressTime, 100, mProgressStatus, false);

                    }
                });

                /////  I have tried doing this ... this solution did work for me but 
                //    this  is expanding one item on whole widget and showing only 
                //    one item on AppWidget instead of showing all GridView
                //    i know this is not gona work properly for me . i Need something else
                ///  tell me from where i should do this call so i can see all gridview at same time 
                //   and can see live update.

                appWidgetManager.updateAppWidget(appWidgetId, remoteView);
            }



        }
    });
    worker.start();


    Bitmap bitmap = BitmapFactory.decodeFile(listItem.fileUrl);
    if (bitmap != null)
        remoteView.setImageViewBitmap(R.id.imageView, bitmap);

    else
        remoteView.setImageViewResource(R.id.imageView, R.drawable.ic_launcher);
    return remoteView;
}
@Override
public RemoteViews getLoadingView() {
    return null;
}

@Override
public int getViewTypeCount() {
    return 1;
}

@Override
public boolean hasStableIds() {
    return true;
}

@Override
public void onCreate() {

}

@Override
public void onDataSetChanged() {
}

@Override
public void onDestroy() {
}

}
公共类ListProvider实现RemoteViewsFactory{
私有ArrayList listItemList=新ArrayList();
私有上下文=null;
私有int-appWidgetId;
private int mProgressStatus=0;
AppWidgetManager AppWidgetManager;
私有处理程序mHandler=新处理程序();
公共列表提供程序(上下文、意图、,
ArrayList(列表项){
this.context=上下文;
appWidgetManager=appWidgetManager.getInstance(上下文);
appWidgetId=intent.getIntExtra(AppWidgetManager.EXTRA\u APPWIDGET\u ID,
AppWidgetManager。无效的\u APPWIDGET\u ID);
如果(listItems!=null)
this.listItemList=(ArrayList)listItems.clone();
}
@凌驾
public int getCount(){
返回listItemList.size();
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
/*
*类似于适配器的getView,其中代替View返回RemoteView
*并使用保存的ImagePath在ImageView上显示图像
*/
@凌驾
公共远程视图getViewAt(最终int位置){
最终远程视图远程视图=新远程视图(
context.getPackageName(),R.layout.list_行);
最终ListItem ListItem=listItemList.get(位置);
setTextViewText(R.id.heading,(listItem.heading.toUpperCase());
setViewVisibility(R.id.ProgressTime,View.VISIBLE);
setProgressBar(R.id.ProgressTime,100,mProgressStatus,false);
线程工作线程=新线程(new Runnable(){
@凌驾
公开募捐{
mProgressStatus=0;

虽然(mProgressStatusHey,你找到答案了吗?亲爱的,在适配器中使用一个线程并保持它运行,然后在该线程中开始更新progressbar…我在appwidget中有一个gridview。在这个GirdView中不是更新。你知道如何更新它吗?。请帮助我。我希望我能帮助你。但我在小部件方面做得不多。从我的角度来看,这是一次蹩脚的尝试。然后我就没做过这个。