Android 同时下载多个图像,并更新列表视图
我正在用android开发一个应用程序,它将从服务器服务获取最新消息,然后显示在列表视图中。代码如下:Android 同时下载多个图像,并更新列表视图,android,listview,Android,Listview,我正在用android开发一个应用程序,它将从服务器服务获取最新消息,然后显示在列表视图中。代码如下: HomeFragment.java @SuppressLint("NewApi") public class HomeFragment extends Fragment { private ListView listView; EditText search; ImageButton btn; ProgressDialog mProgressDialog;
HomeFragment.java
@SuppressLint("NewApi")
public class HomeFragment extends Fragment {
private ListView listView;
EditText search;
ImageButton btn;
ProgressDialog mProgressDialog;
private NewsHomeAdapter customNewsHomeAdapter;
Context homeFragmentContext;
final ArrayList<NewsItem> news_home_data = new ArrayList<NewsItem>();
// child categories JSONArray
JSONArray newsItems = null;
public HomeFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
homeFragmentContext = container.getContext();
listView = (ListView) rootView.findViewById(R.id.news_home_list);
search = (EditText) rootView.findViewById(R.id.search);
search.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN)
&& (keyCode == KeyEvent.KEYCODE_ENTER)) {
String query_text = search.getText().toString().trim();
try {
query_text = URLEncoder.encode(query_text, "utf-8");
} catch (UnsupportedEncodingException e) {
}
String full_query = query_text;
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(search.getWindowToken(), 0);
Intent bussiness = new Intent(homeFragmentContext,
SearchNews.class);
Bundle basket_buss_category = new Bundle();
basket_buss_category.putString("SEARCH", full_query);
;
bussiness.putExtras(basket_buss_category);
startActivity(bussiness);
return true;
}
return false;
}
});
new GetNewsData().execute(TimeUtils.NEWS_HOME_URL);
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position,
long id) {
Intent cluster = new Intent(homeFragmentContext, NewsCluster.class);
Bundle newslist = new Bundle();
newslist.putString("NLIST",news_home_data.get(position).getCluster());
cluster.putExtras(newslist);
startActivity(cluster);
}
});
btn = (ImageButton) rootView.findViewById(R.id.search_button);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String query_text = search.getText().toString().trim();
if (query_text.equalsIgnoreCase("")) {
search.requestFocus();
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(search.getWindowToken(), 0);
}
else {
try {
query_text = URLEncoder.encode(query_text, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String full_query = query_text;
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(search.getWindowToken(), 0);
Intent bussiness = new Intent(homeFragmentContext, SearchNews.class);
Bundle basket_buss_category = new Bundle();
basket_buss_category.putString("SEARCH", full_query);
bussiness.putExtras(basket_buss_category);
startActivity(bussiness);
}
}
});
return rootView;
}
private class GetNewsData extends
AsyncTask<String, Void, ArrayList<NewsItem>> {
protected void onPreExecute() {
super.onPreExecute();
// shfaq Progress Dialogun, deri ne momentin qe te loadohen te
// dheant
mProgressDialog = new ProgressDialog(homeFragmentContext);
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected ArrayList<NewsItem> doInBackground(String... URL) {
String categories_url = URL[0];
// Creating JSON Parser instance
JSONParser jParser = new JSONParser();
// getting JSON string from URL
newsItems = jParser.getJSONFromUrl(categories_url);
Log.e("lsbsfbsfdbsfd", newsItems.toString());
try {
for (int i = 0; i < newsItems.length(); i++) {
JSONObject c = newsItems.getJSONObject(i);
Log.e("po fillo procesimin e ", String.valueOf(i));
String tittle = c.getString(TimeUtils.TAG_TITLE);
String desc = c.getString(TimeUtils.TAG_DESC);
String source = c.getString(TimeUtils.TAG_SOURCE);
String id = c.getString(TimeUtils.TAG_ID);
String link = c.getString(TimeUtils.TAG_LINK);
String published_time = c.getString(TimeUtils.TAG_PUB_TIME);
String image_url = c.getString(TimeUtils.TAG_IMAGE_URL);
String newsList = c.getString(TimeUtils.TAG_CLUSTER);
// download the image;
Bitmap bitmap = null;
try { // Download Image from URL
InputStream input = new
java.net.URL(image_url) .openStream(); // Decode Bitmap
bitmap = BitmapFactory.decodeStream(input); } catch
(Exception e) {
}
news_home_data.add(new NewsItem(tittle, desc, source, id,
link, published_time, bitmap,newsList));
}
} catch (JSONException e) {
e.printStackTrace();
}
return news_home_data;
}
@SuppressLint("ResourceAsColor")
@Override
protected void onPostExecute(ArrayList<NewsItem> news_home_data) {
customNewsHomeAdapter = new NewsHomeAdapter(homeFragmentContext,
news_home_data);
listView.setAdapter(customNewsHomeAdapter);
// setting the nav drawer list adapter
mProgressDialog.dismiss();
}
}
homepragment.java
@SuppressLint(“新API”)
公共类HomeFragment扩展了片段{
私有列表视图列表视图;
编辑文本搜索;
图像按钮;
进程对话框;
私有NewsHomeAdapter自定义NewsHomeAdapter;
语境;碎片语境;
最终ArrayList新闻\主页\数据=新ArrayList();
//子类JSONArray
JSONArray新闻项=null;
公共HomeFragment(){}
@凌驾
创建视图上的公共视图(布局、充气机、最终视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u home,container,false);
homeFragmentContext=container.getContext();
listView=(listView)rootView.findViewById(R.id.news\u home\u list);
search=(EditText)rootView.findViewById(R.id.search);
search.setOnKeyListener(新的OnKeyListener(){
公共布尔onKey(视图v、int keyCode、KeyEvent事件){
if((event.getAction()==KeyEvent.ACTION\u向下)
&&(keyCode==KeyEvent.keyCode\u ENTER)){
字符串查询_text=search.getText().toString().trim();
试一试{
query_text=urlcoder.encode(query_text,“utf-8”);
}捕获(不支持的编码异常e){
}
字符串全文查询=查询文本;
InputMethodManager imm=(InputMethodManager)getActivity().getSystemService(Context.INPUT\u方法\u服务);
imm.hideSoftInputFromWindow(search.getWindowToken(),0);
意向业务=新意向(homeFragmentContext,
SearchNews.class);
Bundle basket_buss_category=新Bundle();
basket\u buss\u category.putString(“搜索”,完整查询);
;
业务。额外支出(篮子类);
startActivity(业务);
返回true;
}
返回false;
}
});
new GetNewsData().execute(TimeUtils.NEWS\u HOME\u URL);
setOnItemClickListener(新的OnItemClickListener(){
公共视图单击(适配器视图a、视图v、内部位置、,
长id){
意图集群=新意图(homeFragmentContext,NewsCluster.class);
Bundle newslist=新Bundle();
newslist.putString(“NLIST”,news\u home\u data.get(position.getCluster());
cluster.putExtras(新闻列表);
星团;
}
});
btn=(ImageButton)rootView.findViewById(R.id.search_按钮);
btn.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图arg0){
字符串查询_text=search.getText().toString().trim();
if(query\u text.equalsIgnoreCase(“”){
search.requestFocus();
InputMethodManager imm=(InputMethodManager)getActivity().getSystemService(Context.INPUT\u方法\u服务);
imm.hideSoftInputFromWindow(search.getWindowToken(),0);
}
否则{
试一试{
query_text=urlcoder.encode(query_text,“utf-8”);
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
字符串全文查询=查询文本;
InputMethodManager imm=(InputMethodManager)getActivity().getSystemService(Context.INPUT\u方法\u服务);
imm.hideSoftInputFromWindow(search.getWindowToken(),0);
意向业务=新意向(homeFragmentContext,SearchNews.class);
Bundle basket_buss_category=新Bundle();
basket\u buss\u category.putString(“搜索”,完整查询);
业务。额外支出(篮子类);
startActivity(业务);
}
}
});
返回rootView;
}
私有类GetNewsData扩展
异步任务{
受保护的void onPreExecute(){
super.onPreExecute();
//shfaq进度对话,请随时下载
//迪安
mProgressDialog=新建进度对话框(homeFragmentContext);
设置消息(“加载…”);
mProgressDialog.setUndeterminate(false);
mProgressDialog.show();
}
@凌驾
受保护的ArrayList doInBackground(字符串…URL){
字符串类别_url=url[0];
//创建JSON解析器实例
JSONParser jParser=新的JSONParser();
//从URL获取JSON字符串
newsItems=jParser.getJSONFromUrl(categories\uURL);
Log.e(“lsbsfbsfdbsfd”,newsItems.toString());
试一试{
对于(int i=0;iNesHomeAdapter.java
package com.dev.apk.time.al;
public class NewsHomeAdapter extends BaseAdapter{
private ArrayList<NewsItem> news_data;
private LayoutInflater layoutInflater;
public NewsHomeAdapter(Context context, ArrayList<NewsItem> news_data) {
this.news_data = news_data;
layoutInflater = LayoutInflater.from(context);
}
public int getCount() {
return news_data.size();
}
public Object getItem(int position) {
return news_data.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.news_home_row, null);
holder = new ViewHolder();
holder.tittle = (TextView) convertView.findViewById(R.id.tittle);
holder.source = (TextView) convertView.findViewById(R.id.source);
holder.published_time = (TextView) convertView.findViewById(R.id.published_time);
holder.news_image = (ImageView) convertView.findViewById(R.id.news_image);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tittle.setText(((NewsItem) news_data.get(position)).getTittle());
holder.source.setText(((NewsItem) news_data.get(position)).getSource());
holder.published_time.setText(((NewsItem) news_data.get(position)).getPublishedTime());
holder.news_image.setImageBitmap(((NewsItem) news_data.get(position)).getImage());
return convertView;
}
static class ViewHolder {
ImageView news_image;
TextView tittle;
TextView source;
TextView published_time;
}
}
UrlImageViewHelper.setUrlDrawable(yourImageView, "http://example.com/image.png", R.drawable.your_loading_image);
holder.news_image.setImageBitmap(((NewsItem) news_data.get(position)).getImage());
UrlImageViewHelper.setUrlDrawable(holder.news_image, news_data.get(position).getImage(), R.drawable.your_loading_image);
new AsyncTask<String,Void,Void>(){
@Override
protected Void doInBackground(String...arg){
//download the image against the url, and run in the background as not on UI thread.
}
@Override
protected void onPostExecute(Void v){
//Load the imageview with the downloaded image.
}
}.execute(url1,url2,url3);