Java 滑动不';在我滚动之前,请不要将图像加载到ImageView
我有一个列表视图,并使用Glide从URL加载图像。我只看到我的占位符图像,直到我滚动过那些行。一旦我滚动过这些行,使它们脱离屏幕并滚动回它们,图像就会加载到图像视图中 适配器:Java 滑动不';在我滚动之前,请不要将图像加载到ImageView,java,android,listview,android-glide,Java,Android,Listview,Android Glide,我有一个列表视图,并使用Glide从URL加载图像。我只看到我的占位符图像,直到我滚动过那些行。一旦我滚动过这些行,使它们脱离屏幕并滚动回它们,图像就会加载到图像视图中 适配器: package kyfb.android.kyfb.com.kyfb; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graph
package kyfb.android.kyfb.com.kyfb;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Path;
import android.graphics.Rect;
import android.media.Image;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.squareup.picasso.Picasso;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* Created by KFB on 8/12/14.
*/
class MarketUpdatesAdapter extends BaseAdapter {
private LayoutInflater inflater;
public MarketUpdatesAdapter(Context context) {
inflater = LayoutInflater.from(context);
}
public int getCount() {
// TODO Auto-generated method stub
return MarketUpdatesFragment.title.length;
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(convertView == null){
convertView = inflater.inflate(R.layout.item_feed, null);
holder = new ViewHolder();
holder.lytItemFeed = (RelativeLayout) convertView.findViewById(R.id.lytItemFeed);
holder.txtTitle= (TextView) convertView.findViewById(R.id.txtTitle);
holder.txtPubDate = (TextView) convertView.findViewById(R.id.txtPubDate);
holder.thumbnail = (ImageView) convertView.findViewById(R.id.thumbnail);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.lytItemFeed.setBackgroundColor(Color.TRANSPARENT);
holder.txtTitle.setText(MarketUpdatesFragment.title[position]);
holder.txtPubDate.setText(MarketUpdatesFragment.pubDate[position]);
Context context = parent.getContext();
if (!"null".equals(MarketUpdatesFragment.thumb[position])) {
Glide.with(context)
.load(MarketUpdatesFragment.thumb[position])
.placeholder(R.drawable.placeholder)
.error(R.drawable.placeholder)
.into(holder.thumbnail);
} else {
holder.thumbnail.setImageResource(R.drawable.placeholder);
}
holder.txtTitle.setTextColor(Color.WHITE);
holder.txtPubDate.setTextColor(Color.WHITE);
return convertView;
}
static class ViewHolder {
TextView txtTitle, txtPubDate;
ImageView thumbnail;
RelativeLayout lytItemFeed;
}
}
片段:
package kyfb.android.kyfb.com.kyfb;
import android.app.Fragment;
import android.app.ListFragment;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.media.Image;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import java.io.IOException;
import java.lang.reflect.Array;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import com.squareup.picasso.Picasso;
/**
* Created by KFB on 8/12/14.
*/
public class MarketUpdatesFragment extends Fragment {
ListView listFeed;
ProgressBar prgLoading;
TextView txtAlert;
MarketUpdatesAdapter la;
static String[] title;
static String[] pubDate;
static String[] link;
static String[] thumb;
String URLFeed;
URL Feed;
DocumentBuilder db;
Document doc;
NodeList nodeList;
Bundle rssBundle = new Bundle();
public MarketUpdatesFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View rootView = inflater.inflate(R.layout.fragment_marketupdates, null);
URLFeed = "https://www.kyfb.com/index.cfm/_api/feed/v1/KYFB/?feedID=62BDAE63-9862-79EC-82AA7CE0C82E8B26";
// URLFeed = "http://kyfbnewsroom.com/category/market-updates/feed/";
Context ctx = rootView.getContext();
la = new MarketUpdatesAdapter(ctx);
listFeed = (ListView) rootView.findViewById(R.id.listFeed);
prgLoading = (ProgressBar) rootView.findViewById(R.id.prgLoading);
txtAlert = (TextView) rootView.findViewById(R.id.txtAlert);
ColorDrawable whiteColor = new ColorDrawable(Color.WHITE);
ColorDrawable blackColor = new ColorDrawable(Color.BLACK);
listFeed.setDivider(whiteColor);
listFeed.setDividerHeight(3);
new getDataTask().execute();
listFeed.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
// TODO Auto-generated method stub
Intent web = new Intent(getActivity(), WebBrowser.class);
rssBundle.putString("myURL", link[position]);
web.putExtras(rssBundle);
startActivity(web);
}
});
return rootView;
}
/** this class is used to handle thread */
public class getDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
}
@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
getDataFromFeed();
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
//dialog.dismiss();
prgLoading.setVisibility(8);
if(title != null){
listFeed.setVisibility(0);
listFeed.setAdapter(la);
}else{
txtAlert.setVisibility(0);
}
}
}
/*
* This code is used to get data from feed and store them
* to array attributes
*/
public void getDataFromFeed(){
try {
Feed = new URL(URLFeed);
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
db = dbf.newDocumentBuilder();
doc = db.parse(new InputSource(Feed.openStream()));
doc.getDocumentElement().normalize();
nodeList = doc.getElementsByTagName("item");
title = new String[nodeList.getLength()];
pubDate = new String[nodeList.getLength()];
link = new String[nodeList.getLength()];
thumb = new String[nodeList.getLength()];
for(int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
Element fstElmnt = (Element) node;
NodeList titleList = fstElmnt.getElementsByTagName("title");
Element titleElement = (Element) titleList.item(0);
titleList = titleElement.getChildNodes();
title[i] = ((Node) titleList.item(0)).getNodeValue();
NodeList pubDateList = fstElmnt.getElementsByTagName("pubDate");
Element pubDateElement = (Element) pubDateList.item(0);
pubDateList = pubDateElement.getChildNodes();
pubDate[i] = ((Node) pubDateList.item(0)).getNodeValue();
// chops off the " +0000" on date
pubDate[i] = pubDate[i].substring(0, pubDate[i].length()-14);
NodeList linkList = fstElmnt.getElementsByTagName("link");
Element linkElement = (Element) linkList.item(0);
linkList = linkElement.getChildNodes();
link[i] = ((Node) linkList.item(0)).getNodeValue();
}
NodeList nodes = doc.getElementsByTagName("enclosure");
for (int i = 0; i < nodes.getLength(); i++) {
Element thumbElement = (Element)nodes.item(i);
String thumbURL = thumbElement.getAttribute("url");
if (thumbURL.equals("")) {
thumb[i] = "null";
} else {
String httpURL = thumbURL;
String httpsURL = httpURL.toString().replace("http", "https");
thumb[i] = httpsURL;
}
// System.out.println(thumb[i]);
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onConfigurationChanged(final Configuration newConfig)
{
// Ignore orientation change to keep activity from restarting
super.onConfigurationChanged(newConfig);
}
}
包kyfb.android.kyfb.com.kyfb;
导入android.app.Fragment;
导入android.app.ListFragment;
导入android.content.Context;
导入android.content.Intent;
导入android.content.res.Configuration;
导入android.graphics.Color;
导入android.graphics.drawable.ColorDrawable;
导入android.media.Image;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.v4.app.FragmentActivity;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ListView;
导入android.widget.ProgressBar;
导入android.widget.TextView;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
导入org.xml.sax.InputSource;
导入org.xml.sax.SAXException;
导入java.io.IOException;
导入java.lang.reflect.Array;
导入java.net.MalformedURLException;
导入java.net.URL;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入com.squareup.picasso.picasso;
/**
*由KFB于2014年8月12日创建。
*/
公共类MarketUpdatesFragment扩展了片段{
ListView listFeed;
进行性阅读;
TextView txtAlert;
市场更新适应洛杉矶;
静态字符串[]标题;
静态字符串[]pubDate;
静态字符串[]链接;
静态字符串[]拇指;
字符串URLFeed;
URL提要;
文档生成器数据库;
文件文件;
NodeList NodeList;
Bundle rssBundle=新Bundle();
public MarketUpdatesFragment(){}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
super.onCreateView(充气机、容器、保存状态);
视图根视图=充气器。充气(R.layout.fragment\u,null);
URLFeed=”https://www.kyfb.com/index.cfm/_api/feed/v1/KYFB/?feedID=62BDAE63-9862-79EC-82AA7CE0C82E8B26”;
//URLFeed=”http://kyfbnewsroom.com/category/market-updates/feed/";
Context ctx=rootView.getContext();
la=新市场更新适配器(ctx);
listFeed=(ListView)rootView.findviewbyd(R.id.listFeed);
prgLoading=(ProgressBar)rootView.findviewbyd(R.id.prgLoading);
txtAlert=(TextView)rootView.findViewById(R.id.txtAlert);
可着色白色=新的可着色(Color.WHITE);
ColorDrawable blackColor=新的ColorDrawable(Color.BLACK);
setDivider(白色);
listFeed.setDividerHeight(3);
新建getDataTask().execute();
setOnItemClickListener(新的OnItemClickListener(){
公共单击(适配器视图arg0,视图arg1,内部位置,
长arg3){
//TODO自动生成的方法存根
Intent web=新的Intent(getActivity(),WebBrowser.class);
putsString(“myURL”,link[position]);
web.putExtras(rssBundle);
星触觉(网络);
}
});
返回rootView;
}
/**此类用于处理线程*/
公共类getDataTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
}
@凌驾
受保护的Void doInBackground(Void…arg0){
//TODO自动生成的方法存根
getDataFromFeed();
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
//TODO自动生成的方法存根
//dialog.dismise();
设置可见性(8);
如果(标题!=null){
listFeed.setVisibility(0);
setAdapter(la);
}否则{
txtAlert.setVisibility(0);
}
}
}
/*
*此代码用于从提要获取数据并存储它们
*数组属性
*/
public void getDataFromFeed(){
试一试{
Feed=新URL(URLFeed);
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
db=dbf.newDocumentBuilder();
doc=db.parse(新的InputSource(Feed.openStream());
doc.getDocumentElement().normalize();
nodeList=doc.getElementsByTagName(“项目”);
title=新字符串[nodeList.getLength()];
pubDate=新字符串[nodeList.getLength()];
link=新字符串[nodeList.getLength()];
thumb=新字符串[nodeList.getLength()];
for(int i=0;i