第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

為什么我的藥滑動之后才加載圖片啊

就是點(diǎn)開程序他不加載圖片,顯示的是系統(tǒng)圖片,要往下滑才能加載,應(yīng)該不是網(wǎng)絡(luò)原因,因?yàn)闆]加緩存之前好像沒這個問題、

正在回答

5 回答

解決辦法:將mImageView和mUrl聲明在AsyncTask中,刪除在ImageLorder中的聲明。老師在ImageLorder中聲明是為了Handler使用,我們這里將Handler的內(nèi)容全部刪除其實(shí)是沒有影響的。
原理:如果我們在adapter構(gòu)造方法中初始化ImageView,全局只有一個ImageLorder,而在ImageLoder中聲明mImageView和mUrl,那么adapter沒調(diào)用一次ShowImageByAsynctask,mImageViedw和mUrl就會被初始化一次,導(dǎo)致上一個bitmap形成后需要賦值的ImageVIew卻發(fā)生了改變,無法加載成功。
解決辦法:
1:getview()方法每次都new ImageLorder ?不推薦
2:adapter構(gòu)造方法中初始化ImageLorder,但是mImageView和mUrl在Asynctask中聲明,避免被覆蓋

0 回復(fù) 有任何疑惑可以回復(fù)我~

我只能告訴你發(fā)揮作用的代碼是在哪?但是如何解決我也不知道
如果你是在getView()方法中ImageLorder=new ImageLorder()的話,就不會出現(xiàn)這個問題。但如果是在構(gòu)造方法中初始化的,就會出現(xiàn)這個問題。

0 回復(fù) 有任何疑惑可以回復(fù)我~

解決了嗎?

0 回復(fù) 有任何疑惑可以回復(fù)我~
但是我的監(jiān)聽器里面還沒寫函數(shù)額
package?com.example.newapplication;

import?java.io.BufferedInputStream;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.InputStreamReader;
import?java.net.HttpURLConnection;
import?java.net.MalformedURLException;
import?java.net.URL;


import?android.graphics.Bitmap;
import?android.graphics.BitmapFactory;
import?android.os.AsyncTask;
import?android.os.Handler;
import?android.os.Message;
import?android.support.v4.util.LruCache;
import?android.widget.ImageView;

public?class?ImageLoader?{
	private?ImageView?mimageView;
	private?String?murl;
	private?LruCache<String?,?Bitmap>?mCache;
	
	public??ImageLoader(){
		int?MaxMemery?=?(int)?Runtime.getRuntime().maxMemory();	//先獲得最大內(nèi)存
		int?cacheSize?=?MaxMemery/4;
		mCache?=?new?LruCache<String,?Bitmap>(cacheSize){
			protected?int?sizeOf(String?key,?Bitmap?value)?{
				return?value.getByteCount();		//每次把圖片加入緩存時會調(diào)用?用來返回每張圖片的大小
			}
		};
	}
	
	public?void?AddBitmapToCache(String?url,Bitmap?bitmap){
		if?(mCache.get(url)==null)?{
			mCache.put(url,?bitmap);
		}
	}
	
	public?Bitmap?getBitmapFromCache(String?url){	
		return?mCache.get(url);		
	}
	//通過handler更新ui
	private?Handler?handler?=?new?Handler(){
		
		public?void?handleMessage(android.os.Message?msg)?{
			super.handleMessage(msg);
			if?(mimageView.getTag().equals(murl))?{		//只有圖片和url匹配時才設(shè)置圖片?使他一一對應(yīng)
				mimageView.setImageBitmap((Bitmap)?msg.obj);
			}
		};
	};
	public?void?showImageByAsyncTask(ImageView?imageView,?String?url)?{
		Bitmap?bitmap?=?getBitmapFromCache(url);		//?從緩存中取出對應(yīng)的圖片
		if?(bitmap?==?null)?{		//?如果緩存中沒有,那么必須下載
//			imageView.setImageResource(R.drawable.ic_launcher);		//?為空的時候先設(shè)置為自帶圖標(biāo)
			new?NewsAsyncTask(imageView,murl).execute(url);
		}?else?{
			imageView.setImageBitmap(bitmap);
		}
//		new?NewsAsyncTask(imageView,murl).execute(url);
	}
	
//	public?void?ShowImageByThread(ImageView?imageView,final?String?url){
//		mimageView?=?imageView;
//		murl?=?url;
//		new?Thread(){
//			public?void?run()?{
//				super.run();
//				Bitmap?bitmap?=?GetBitmapFromUrl(url);	//通過下面的方法獲取Bitmap對象?然后交給handler傳給主線程更新UI
//				Message?message?=?new?Message().obtain();//獲得massage對象
//				message.obj?=?bitmap;
//				handler.sendMessage(message);
//			}
//		}.start();
//	}
	
	public?Bitmap?GetBitmapFromUrl(String?urlString){
		InputStream?is?=?null;
		try?{
			URL?url?=?new?URL(urlString);
			HttpURLConnection?httpURLConnection?=?(HttpURLConnection)?url.openConnection();	//獲得URL之后獲得連接
			is?=?new?BufferedInputStream(httpURLConnection.getInputStream());
			Bitmap?bitmap?=?BitmapFactory.decodeStream(is);		//將輸入流轉(zhuǎn)換成Bitmap對象
			httpURLConnection.disconnect();
			return?bitmap;
		}?catch?(MalformedURLException?e)?{
			e.printStackTrace();
		}?catch?(IOException?e)?{
			e.printStackTrace();
		}finally{
			try?{
				is.close();
			}?catch?(IOException?e)?{
				e.printStackTrace();
			}
		}
		
		return?null;
		
	}
	private?class?NewsAsyncTask?extends?AsyncTask<String,?Void,?Bitmap>?{

		public?NewsAsyncTask(ImageView?imageView,String?url)?{
			mimageView?=?imageView;
			murl?=?url;
		}

		@Override
		protected?Bitmap?doInBackground(String...?params)?{
			String?url?=?params[0];
			Bitmap?bitmap?=?GetBitmapFromUrl(url);//?從網(wǎng)絡(luò)獲取圖片?前面bitmap一直沒內(nèi)容?現(xiàn)在才從網(wǎng)上獲取資源
			if?(bitmap?!=?null)?{
				AddBitmapToCache(url,?bitmap);	//?將圖片加入緩存
			}
			return?bitmap;
		}

		@Override
		protected?void?onPostExecute(Bitmap?bitmap)?{
			super.onPostExecute(bitmap);
//			ImageView?imageView?=?(ImageView)?mListView.findViewWithTag(mUrl);
//			if?(imageView?!=?null?&&?bitmap?!=?null)?{
//				imageView.setImageBitmap(bitmap);
//			}
//			mTask.remove(this);
//			if?(mimageView.getTag().equals(murl))?{	//前面在Myadapter里面已經(jīng)將圖片對應(yīng)url,如果對應(yīng)才設(shè)置圖片
//				mimageView.setImageBitmap(bitmap);
//			}
			?if(mimageView.getTag()==null){//初始化時并未設(shè)置Tag

			?????mimageView.setTag(murl);

			}else?if(mimageView.getTag().equals(murl)){//已經(jīng)設(shè)置過Tag

			????mimageView.setImageBitmap(bitmap);

			}
		}

	}
}

package?com.example.newapplication;

import?java.util.List;
import?java.util.zip.Inflater;

import?android.content.Context;
import?android.view.LayoutInflater;
import?android.view.View;
import?android.view.ViewGroup;
import?android.widget.AbsListView;
import?android.widget.AbsListView.OnScrollListener;
import?android.widget.BaseAdapter;
import?android.widget.ImageView;
import?android.widget.TextView;

public?class?MyAdapter?extends?BaseAdapter{
	private?List<NewsBean>?mList;
	private?LayoutInflater?inflater;
	private?ImageLoader?mimageLoader;
	private?int?mStart,mEnd;
	public?static?String[]?URLS;
	
	public?MyAdapter(List<NewsBean>?data,Context?context){
		mList?=?data;
		inflater?=?LayoutInflater.from(context);
		mimageLoader?=?new?ImageLoader();	//初始化ImageLoader,避免后面重復(fù)創(chuàng)建
		URLS?=?new?String[data.size()];
		for?(int?i?=?0;?i?<?data.size();?i++)?{
			URLS[i]?=?data.get(i).imageViewURL;
		}
	}
	public?int?getCount()?{
		
		return?mList.size();
	}

	@Override
	public?Object?getItem(int?position)?{
		//?TODO?Auto-generated?method?stub
		return?mList.get(position);
	}

	@Override
	public?long?getItemId(int?position)?{
		//?TODO?Auto-generated?method?stub
		return?position;
	}

	@Override
	public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{
		ViewHolder?holder;
		if?(convertView==null)?{	//如果該view對象為空?則創(chuàng)建?否則?直接通過Gettag()方法獲得
			holder?=?new?ViewHolder();
			convertView?=?inflater.inflate(R.layout.item_layout,?null);	//將顯示樣式轉(zhuǎn)換成View對象
			holder.imageView?=?(ImageView)?convertView.findViewById(R.id.imageView1);	//初始化holder的組件?find樣式中的id
			holder.Title?=?(TextView)?convertView.findViewById(R.id.Item_tv1);
			holder.conten?=?(TextView)?convertView.findViewById(R.id.Item_tv2);
			convertView.setTag(holder);
		}else?{
			holder?=?(ViewHolder)?convertView.getTag();
		}
		//設(shè)置控件的資源
		holder.imageView.setImageResource(R.drawable.ic_launcher);
		String?url?=?mList.get(position).imageViewURL;
		holder.imageView.setTag(url);		//將圖片和url綁定
		mimageLoader.showImageByAsyncTask(holder.imageView,?url);	//設(shè)置圖片
		holder.Title.setText(mList.get(position).Title);		//設(shè)置標(biāo)題
		holder.conten.setText(mList.get(position).content);
		return?convertView;
	}
	//通過該對象?避免重復(fù)創(chuàng)建View對象
	class?ViewHolder{
		ImageView?imageView;
		TextView?Title,conten;
	}
//	public?void?onScrollStateChanged(AbsListView?view,?int?scrollState)?{
//		if?(scrollState==SCROLL_STATE_IDLE)?{	//表示此時滑動在停止?fàn)顟B(tài)
//			
//		}
//	}
//	@Override
//	public?void?onScroll(AbsListView?view,?int?firstVisibleItem,
//			int?visibleItemCount,?int?totalItemCount)?{
//			mStart?=?firstVisibleItem;
//			mEnd?=?firstVisibleItem+visibleItemCount;
//	}
}


0 回復(fù) 有任何疑惑可以回復(fù)我~

老師課程的最后一課中有講首次啟動預(yù)加載。因?yàn)閯倖拥臅r候并沒有觸發(fā)停止的監(jiān)聽器,但加載的操作是在這個狀態(tài)改變的監(jiān)聽器的實(shí)現(xiàn)函數(shù)中實(shí)現(xiàn)的。解決辦法就是在首次啟動時因?yàn)橛|發(fā)滾動的監(jiān)聽器,將加載的操作在這個監(jiān)聽器中只在開始時做一次。

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消
Android必學(xué)-異步加載
  • 參與學(xué)習(xí)       50618    人
  • 解答問題       326    個

了解Android中的異步加載處理方法,這是面試問的最多的知識點(diǎn)

進(jìn)入課程

為什么我的藥滑動之后才加載圖片啊

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號