Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用程序小部件listview设计在使用url加载动态图像时发生更改_Android_Widget_Android Widget - Fatal编程技术网

Android 应用程序小部件listview设计在使用url加载动态图像时发生更改

Android 应用程序小部件listview设计在使用url加载动态图像时发生更改,android,widget,android-widget,Android,Widget,Android Widget,嗨,我正在使用小部件列表视图。我想在每个小部件listview项上加载图像,所以我使用下面的代码使用url加载图像 public class ListProvider implements RemoteViewsService.RemoteViewsFactory { private String TAG = ListProvider.class.getSimpleName(); private Context context = null; private UserPreference u

嗨,我正在使用小部件列表视图。我想在每个小部件listview项上加载图像,所以我使用下面的代码使用url加载图像

 public class ListProvider implements RemoteViewsService.RemoteViewsFactory {

private String TAG = ListProvider.class.getSimpleName();
private Context context = null;
private UserPreference userPreference;
private int appWidgetId;
private String feedsData, mLaneName, mLaneId;
private Tooteet.Collection collection;
private ArrayList<Item> mItems;

public ListProvider(Context context, Intent intent) {
    this.context = context;
    userPreference = new UserPreference(context);
    appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
    feedsData = intent.getStringExtra(LargeWidgetProvider.LARGE_WIDGET_LIST_DATA);
    mLaneId = intent.getStringExtra(LargeWidgetProvider.WIDGET_LANE_ID);
    mLaneName = intent.getStringExtra(LargeWidgetProvider.WIDGET_LANE_NAME);

    if(mLaneId != null && mLaneName != null) {
        collection = new Tooteet.Collection(feedsData, mLaneId, mLaneName);
    }
    mItems = getItems(collection);
}

public ArrayList<Item> getItems(Tooteet.Collection collection) {
    ArrayList<Item> items = new ArrayList<>();
    if (collection == null) {
        return items;
    }

    int sectionFirstPosition = 0;
    int i = 0;

    for (Tooteet tooteet : collection.getItems()) {
        int type = tooteet.getTweetType();
        int viewType = VIEW_TYPE_TEXT;
        switch (type) {
            case TooteetType.TEXT:
            case TooteetType.NOTE:
                viewType = VIEW_TYPE_TEXT;
                // add text;
                break;
            case TooteetType.PICTURE:
            case TooteetType.DRAWING:
            case TooteetType.VIDEO:
                viewType = VIEW_TYPE_MEDIA;
                // add media
                break;
            case TooteetType.AUDIO:
            case TooteetType.DOCUMENT:
                //case TooteetType.EXPENSE:
                viewType = VIEW_TYPE_FILE;
                // add file
                break;
            case TooteetType.MEASURE:
                viewType = VIEW_TYPE_MEASURE;
                break;
            case TooteetType.EXPENSE:
                viewType = VIEW_TYPE_EXPENSE;
                break;
        }

        Log.d(TAG, "getItems   -- tooteet: "+tooteet);
        items.add(new Item("", false, tooteet, viewType, sectionFirstPosition, i));
        i++;
    }
    return items;
}

@Override
public int getCount() {
    Log.d(TAG, " getCount() -- mItems.size(): "+mItems.size());
    return mItems.size();
}

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

/*
 *Similar to getView of Adapter where instead of View
 *we return RemoteViews
 *
 */
@Override
public RemoteViews getViewAt(final int position) {
    Log.d(TAG,"=============getViewAt   position=========="+position);
    RemoteViews remoteView = null;
    final Item item = mItems.get(position);

    if (item.mTooteet.getTweetType() == TooteetType.TEXT || item.mTooteet.getTweetType() == TooteetType.NOTE) {
        remoteView = new RemoteViews(context.getPackageName(), R.layout.widget_feed_list_text);
        remoteView.setImageViewResource(R.id.feed_type,R.drawable.feed_list_note);
    } else if (item.mTooteet.getTweetType() == TooteetType.PICTURE || item.mTooteet.getTweetType() == TooteetType.DRAWING  || item.mTooteet.getTweetType() == TooteetType.VIDEO) {
        remoteView = new RemoteViews(context.getPackageName(), R.layout.widget_feed_list_image);
        int drawable = R.drawable.feed_list_attachment;
        if (item.mTooteet.getTweetType() == TooteetType.PICTURE) {
            drawable = R.drawable.feed_list_picture;
        } else if (item.mTooteet.getTweetType() == TooteetType.VIDEO) {
            drawable = R.drawable.feed_list_video;
        }else if(item.mTooteet.getTweetType() == TooteetType.DRAWING){
            drawable = R.drawable.feed_list_drawing;
        }
        remoteView.setImageViewResource(R.id.feed_type,drawable);
        try {

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

        Handler uiHandler = new Handler(Looper.getMainLooper());
        final RemoteViews finalRemoteView1 = remoteView;
        uiHandler.post(new Runnable(){
            @Override
            public void run() {
                Picasso.with(context).load(item.mTooteet.getThumbUrl1()).into(
                        finalRemoteView1, R.id.feed_image,
                        new int[]{appWidgetId});
            }
        });
    }  else if (item.mTooteet.getTweetType() == TooteetType.AUDIO || item.mTooteet.getTweetType() == TooteetType.DOCUMENT) {
        remoteView = new RemoteViews(context.getPackageName(), R.layout.widget_feed_list_audio);
        int drawable;
        if (item.mTooteet.getTweetType() == TooteetType.AUDIO) {
            drawable = R.drawable.feed_list_audio;
        } else {
            drawable = FeedDocResourceHandler.getIconResForListDoc(item.mTooteet.getUniqueFileName());
        }
        remoteView.setImageViewResource(R.id.feed_type,drawable);
    } else if (item.mTooteet.getTweetType() == TooteetType.MEASURE) {
        remoteView = new RemoteViews(context.getPackageName(), R.layout.widget_feed_list_measure);
    }else if (item.mTooteet.getTweetType() == TooteetType.EXPENSE) {
        remoteView = new RemoteViews(context.getPackageName(), R.layout.widget_feed_list_expense);
    }

    remoteView.setTextViewText(R.id.feed_keywords, item.mTooteet.getKeywords());

    if(!TextUtils.isEmpty(item.mTooteet.getTooteetText())){
        remoteView.setViewVisibility(R.id.feed_text, View.VISIBLE);
        remoteView.setTextViewText(R.id.feed_text, item.mTooteet.getTooteetText());
    }else{
        remoteView.setViewVisibility(R.id.feed_text, View.GONE);
    }

    if (!item.mTooteet.isLocationEmpty()) {
        if (!TextUtils.isEmpty(item.mTooteet.getLocationString())) {
            remoteView.setViewVisibility(R.id.feed_location, View.VISIBLE);
            remoteView.setTextViewText(R.id.feed_location, item.mTooteet.getLocationString());
        } else {
            final RemoteViews finalRemoteView = remoteView;
            ReverseGeocoder.with(Constants.getLanesApp()).load(item.mTooteet, new com.kwypesoft.lanes.location.GeocodeApi.OnLocationListener() {
                @Override
                public void onReceive(String location) {
                    if (!TextUtils.isEmpty(location)) {
                        finalRemoteView.setViewVisibility(R.id.feed_location, View.VISIBLE);
                        finalRemoteView.setTextViewText(R.id.feed_location, item.mTooteet.getLocationString());
                        item.mTooteet.setLocationString(location);
                    }else{
                        finalRemoteView.setViewVisibility(R.id.feed_location, View.GONE);
                    }
                }
            });
        }
    }else{
        remoteView.setViewVisibility(R.id.feed_location, View.GONE);
    }

    final Intent fillInIntent = new Intent();
    fillInIntent.setAction(LargeWidgetProvider.ACTION_TOAST);
    final Bundle bundle = new Bundle();
    bundle.putString(LargeWidgetProvider.WIDGET_LANE_ID, mLaneId);
    bundle.putSerializable(DetailBase.FEED_DETAILS, item.mTooteet);
    fillInIntent.putExtras(bundle);
    remoteView.setOnClickFillInIntent(R.id.root, fillInIntent);
    return remoteView;
}


@Override
public RemoteViews getLoadingView() {
    return null;
}

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

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


@Override
public void onCreate() {
}

@Override
public void onDataSetChanged() {
}

@Override
public void onDestroy() {
}

private static class Item{
    boolean isHeader;
    String header;
    public Tooteet mTooteet;
    int viewType;
    int firstPosition;
    int itemPosition;

    public Item(String header, boolean isHeader, Tooteet tooteet, int type, int firstPosition, int itemPosition) {
        this.header = header;
        this.isHeader = isHeader;
        mTooteet = tooteet;
        this.viewType = type;
        this.firstPosition = firstPosition;
        this.itemPosition = itemPosition;
    }
}
公共类ListProvider实现RemoteViewsService.RemoteViewsFactory{
私有字符串标记=ListProvider.class.getSimpleName();
私有上下文=null;
私人用户偏好;
私有int-appWidgetId;
私有字符串feedsData、mLaneName、mLaneId;
私人图特。收藏;
私有数组列表;
公共ListProvider(上下文、意图){
this.context=上下文;
userPreference=新的userPreference(上下文);
appWidgetId=intent.getIntExtra(AppWidgetManager.EXTRA\u APPWIDGET\u ID,AppWidgetManager.INVALID\u APPWIDGET\u ID);
feedsData=intent.getStringExtra(LargeWidgetProvider.LARGE\u WIDGET\u LIST\u数据);
mLaneId=intent.getStringExtra(LargeWidgetProvider.WIDGET\u LANE\u ID);
mLaneName=intent.getStringExtra(LargeWidgetProvider.WIDGET\u LANE\u NAME);
if(mLaneId!=null&&mLaneName!=null){
collection=新的Tooteet.collection(feedsData、mLaneId、mLaneName);
}
mItems=getItems(集合);
}
公共ArrayList getItems(Tooteet.Collection){
ArrayList items=新建ArrayList();
if(集合==null){
退货项目;
}
int sectionFirstPosition=0;
int i=0;
for(Tooteet-Tooteet:collection.getItems()){
int type=tooteet.getTweetType();
int viewType=视图类型文本;
开关(类型){
case TooteType.TEXT:
案例TooteType.NOTE:
viewType=视图\类型\文本;
//添加文本;
打破
案例TooteType.PICTURE:
案例TooteType.DRAWING:
案例TooteType.VIDEO:
viewType=视图\类型\媒体;
//添加媒体
打破
案例TooteType.AUDIO:
案例TooteType.DOCUMENT:
//案例TooteType.EXPENSE:
viewType=视图类型文件;
//添加文件
打破
案例TooteType.MEASURE:
viewType=视图\类型\度量;
打破
案例TooteType.EXPENSE:
视图类型=视图类型费用;
打破
}
Log.d(标记“getItems--tooteet:+tooteet”);
添加(新项(“”,false,tooteet,viewType,sectionFirstPosition,i));
i++;
}
退货项目;
}
@凌驾
public int getCount(){
Log.d(标记“getCount()--mItems.size():”+mItems.size());
返回mItems.size();
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
/*
*类似于适配器的getView,其中代替了View
*我们返回远程视图
*
*/
@凌驾
公共远程视图getViewAt(最终int位置){
Log.d(标签,”====================================================================================+位置);
RemoteViews remoteView=null;
最终项目=mItems.get(位置);
if(item.mTooteet.getTweetType()==tooteetype.TEXT | | item.mTooteet.getTweetType()==tooteetype.NOTE){
remoteView=新的远程视图(context.getPackageName(),R.layout.widget\u feed\u list\u text);
setImageViewResource(R.id.feed\u类型,R.drawable.feed\u列表\u注释);
}else if(item.mTooteet.getTweetType()==tooteetype.PICTURE | | | item.mTooteet.getTweetType()==tooteetype.DRAWING | | | item.mTooteet.getTweetType()==tooteetype.VIDEO){
remoteView=新的远程视图(context.getPackageName(),R.layout.widget\u feed\u list\u image);
int drawable=R.drawable.feed\u list\u附件;
if(item.mTooteet.getTweetType()==tooteetype.PICTURE){
drawable=R.drawable.feed\u列表\u图片;
}else if(item.mTooteet.getTweetType()==tooteetype.VIDEO){
drawable=R.drawable.feed\u list\u video;
}else if(item.mTooteet.getTweetType()==TooteType.DRAWING){
可绘制=R.drawable.feed\u列表\u图纸;
}
setImageViewResource(R.id.feed_类型,可绘制);
试一试{
}捕获(例外e){
e、 printStackTrace();
}
Handler uiHandler=新处理程序(Looper.getMainLooper());
最终远程视图最终远程视图1=远程视图;
uiHandler.post(新的Runnable(){
@凌驾
公开募捐{
将(item.mTooteet.getThumbUrl1())加载到(
最终删除视图1,R.id.feed_图像,
新的int[]{appWidgetId});
}
});
}else if(item.mTooteet.getTweetType()==tooteetype.AUDIO | | item.mTooteet.getTweetType()==tooteetype.DOCUMENT){
remoteView=新的远程视图(context.getPackageName(),R.layout.widget\u feed\u list\u audio);
int可绘制;
if(item.mTooteet.getTweetType()==tooteetype.AUDIO){
drawable=R.drawable.feed\u list\u audio;
}否则{
drawable=FeedDocResourceHandler.getIconResForListDoc(item.mTooteet.getUniqueFileName());
}
setImageViewResource(R.id.feed_类型,可绘制);
}else if(item.mTooteet.getTweetType()==tooteetype.MEASURE){
remoteView=新的远程视图(context.getPackageName(),R.layout.widget\u feed\u list\u measure);
}else if(item.mTooteet.getTweetType()==tooteetype.EXPENSE){
remoteView=新的远程视图(context.getPackageName(),R.layout.widget\u feed\u list\u expense);
}
setExtViewText(R.id.feed_关键字,item.mTooteet.getKeywords());
如果(!TextUtils.isEmpty(item.mTooteet.getTooteetText())){
setViewVisibility(R.id.feed_text,View.VISIBLE);
setTextViewText(R.id.feed_text,item.mTooteet.getTooteetText());
}否则{
setViewVisibility(R.id.feed_text,View.GONE);
}
如果(!item.mTooteet.isLocationEmpty()){
如果(!TextUtils.isEmpty)(item.mT
Picasso.with(this)
     .load("YOUR IMAGE URL HERE")               
     .error(R.drawable.ic_error_fallback)      // optional        
     .resize(250, 200)                        // optional        
     .rotate(90)                             // optional        
     .into(imageView);
public class YourViewsFactory implements RemoteViewsService.RemoteViewsFactory
{
 Map<Integer, Boolean> flags = Collections.synchronizedMap(new HashMap<Integer, Boolean>());
 Bitmap mBitmap;
 Handler handler = new Handler(Looper.getMainLooper());


  @Override
  public RemoteViews getViewAt(final int position)
{
  final RemoteViews row = new RemoteViews(ctxt.getPackageName(), R.layout.row);
  flags.put(position, false);
  handler.post(new Runnable()
  {
    @Override
    public void run()
    {
        m_imgLoader.loadImage(YOUR_IMAGE_URL, new SimpleImageLoadingListener()
        {
            @Override
            public void onLoadingStarted(String imageUri, View view)
            {
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason)
            {
                flags.put(position, true);
            }

            @Override
            public void onLoadingCancelled(String imageUri, View view)
            {
                flags.put(position, true);
            }

            @Override
            public void onLoadingComplete(String arg0, View arg1, Bitmap bitmap)
            {
                mBitmap = bitmap;
                flags.put(position, true);
            }
        });
    }
});

while (!flags.get(position))
{
    try
    {
        Thread.sleep(100);
    } catch (InterruptedException e)
    {
        e.printStackTrace();
    }
}
flags.put(position, false);
if (mBitmap != null)
{
    row.setImageViewBitmap(R.id.ivPoster, mBitmap);
} else
{
    row.setImageViewResource(R.id.ivPoster, R.drawable.cw);
}
mBitmap = null;
  } // End of getViewAt override


} // End of class