【Android开发】怎么在ListView中做一个图片批量上传的队列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【Android开发】怎么在ListView中做一个图片批量上传的队列相关的知识,希望对你有一定的参考价值。

如图所示:怎么在ListView中做一个图片批量上传的队列?第一,确保图片按顺序上传;第二,上传的过程中滑动ListView时,很好的处理getView复用问题,即滑动ListView后,不能影响上传队列顺序,仍然按预先的队列执行上传, 求可执行代码!谢谢!

参考技术A 先是两个layout:
1、main.xml

复制代码
复制代码
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent">
6 <ListView
7 android:layout_width="fill_parent"
8 android:layout_height="fill_parent"
9 android:focusable="false"
10 android:id="@+id/lvImageList" >
11 </ListView>
12 </LinearLayout>
复制代码
复制代码
2、listitem.xml

复制代码
复制代码
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="horizontal"
4 android:layout_width="fill_parent"
5 android:layout_height="?android:attr/listPreferredItemHeight">
6 <ImageView
7 android:id="@+id/itemImgImageInfo"
8 android:layout_marginTop="4dip"
9 android:layout_marginBottom="4dip"
10 android:layout_width="?android:attr/listPreferredItemHeight"
11 android:layout_height="?android:attr/listPreferredItemHeight">
12 </ImageView>
13 <TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android"
14 android:layout_width="fill_parent"
15 android:layout_height="fill_parent"
16 android:paddingLeft="4dip"
17 android:mode="twoLine">
18 <CheckedTextView
19 android:id="@+id/itemChkImageInfo"
20 android:layout_width="fill_parent"
21 android:layout_height="wrap_content"
22 android:gravity="center_vertical"
23 android:textAppearance="?android:attr/textAppearanceSmall"
24 android:checkMark="?android:attr/listChoiceIndicatorMultiple">
25 </CheckedTextView>
26 <TextView
27 android:id="@+id/itemTxtImageInfo"
28 android:layout_width="fill_parent"
29 android:layout_height="wrap_content"
30 android:gravity="center_vertical|top"
31 android:layout_marginBottom="4dip"
32 android:layout_below="@+id/itemChkImageInfo"
33 android:textAppearance="?android:attr/textAppearanceSmall">
34 </TextView>
35 </TwoLineListItem>
36 </LinearLayout>
复制代码
复制代码
接着是代码:
复制代码
复制代码
1 package com.android.MultipleChoiceImageList;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 import android.app.Activity;
9 import android.content.Context;
10 import android.database.Cursor;
11 import android.graphics.Bitmap;
12 import android.net.Uri;
13 import android.os.Bundle;
14 import android.provider.MediaStore;
15 import android.provider.MediaStore.Images;
16 import android.view.LayoutInflater;
17 import android.view.View;
18 import android.view.ViewGroup;
19 import android.widget.AdapterView;
20 import android.widget.CheckedTextView;
21 import android.widget.ImageView;
22 import android.widget.ListView;
23 import android.widget.SimpleAdapter;
24 import android.widget.TextView;
25 import android.widget.AdapterView.OnItemClickListener;
26
27 public class MainActivity extends Activity
28
29 private ListView lvImageList;
30
31 private String imageID= "imageID";
32 private String imageName = "imageName";
33 private String imageInfo = "imageInfo";
34
35 private ArrayList<String> fileNames = new ArrayList<String>();
36
37 private MultipleChoiceImageListAdapter mAdapter;
38
39 /** Called when the activity is first created. */
40 @Override
41 public void onCreate(Bundle savedInstanceState)
42 super.onCreate(savedInstanceState);
43 setContentView(R.layout.main);
44
45 lvImageList=(ListView) this.findViewById(R.id.lvImageList);
46 lvImageList.setItemsCanFocus(false);
47 lvImageList.setOnItemClickListener(new OnItemClickListener()
48 @Override
49 public void onItemClick(AdapterView<?> parent, View view, int position, long id)
50
51 CheckedTextView checkedTextView = (CheckedTextView) view.findViewById(R.id.itemChkImageInfo);
52 checkedTextView.toggle();
53 mAdapter.setCheckItem(position, checkedTextView.isChecked());
54
55 );
56 try
57 String[] from = imageID, imageName, imageInfo;
58 int[] to = R.id.itemImgImageInfo, R.id.itemChkImageInfo, R.id.itemTxtImageInfo;
59 mAdapter = new MultipleChoiceImageListAdapter(MainActivity.this, GetImageList(), R.layout.listitem, from, to);
60 lvImageList.setAdapter(mAdapter);
61
62 catch(Exception ex)
63 return;
64
65
66
67 //获取图片列表
68 private ArrayList<Map<String, String>> GetImageList()
69
70 ArrayList<Map<String, String>> imageList = new ArrayList<Map<String,String>>();
71 HashMap<String, String> imageMap;
72
73 //读取SD卡中所有图片
74 Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
75 String[] projection = MediaStore.Images.Media._ID, MediaStore.Images.Media.DISPLAY_NAME,MediaStore.Images.Media.DATA, MediaStore.Images.Media.SIZE;
76 String selection = MediaStore.Images.Media.MIME_TYPE + "=?";
77 String[] selectionArg ="image/jpeg";
78 Cursor mCursor = this.managedQuery(uri, projection, selection, selectionArg, MediaStore.Images.Media.DISPLAY_NAME);
79 imageList.clear();
80 if (mCursor != null)
81 mCursor.moveToFirst();
82 while (mCursor.getPosition() != mCursor.getCount())
83
84 imageMap= new HashMap<String, String>();
85 imageMap.put(imageID, mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media._ID)));
86 imageMap.put(imageName, mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME)));
87 imageMap.put(imageInfo, " " + (mCursor.getLong(mCursor.getColumnIndex(MediaStore.Images.Media.SIZE))/1024)+"KB");
88 imageList.add(imageMap);
89 fileNames.add(mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA)));
90 mCursor.moveToNext();
91
92 mCursor.close();
93
94 return imageList;
95
96
97 //可多选图片列表适配器
98 class MultipleChoiceImageListAdapter extends SimpleAdapter
99
100 private Map<Integer, Boolean> map;
101 private List<Integer> state;
102 private List<? extends Map<String, ?>> mList;
103
104 LayoutInflater mInflater;
105
106 public MultipleChoiceImageListAdapter(Context context, List<Map<String, String>> data, int resource, String[] from, int[] to)
107 super(context, data, resource, from, to);
108 map = new HashMap<Integer, Boolean>();
109 mInflater = LayoutInflater.from(context);
110 mList = data;
111 for(int i = 0; i < data.size(); i++)
112 map.put(i, false);
113
114 state = new ArrayList<Integer>();
115
116
117 @Override
118 public int getCount()
119 return mList.size();
120
121
122 @Override
123 public Object getItem(int position)
124 return position;
125
126
127 @Override
128 public long getItemId(int position)
129 return position;
130
131
132 //设置条目选中状态
133 public void setCheckItem(int position, Boolean isChecked)
134 map.put(position, isChecked);
135 if (state.contains(position))
136 state.remove((Object)position);
137 if (isChecked)
138 state.add(position);
139
140
141
142 //获取列表中已选中条目
143 public long[] getCheckItemIds()
144 int count = state.size();
145 long[] ids = new long[count];
146 for (int i = 0; i < count; i++)
147 ids[i]= (long)state.get(i);
148
149 return ids;
150
151
152 @Override
153 public View getView(int position, View convertView, ViewGroup parent)
154 if(convertView == null)
155 convertView = mInflater.inflate(R.layout.listitem, null);
156
157
158 CheckedTextView checkedTextView = (CheckedTextView) convertView.findViewById(R.id.itemChkImageInfo);
159 checkedTextView.setChecked(map.get(position));
160 checkedTextView.setText((String)mList.get(position).get(imageName));
161
162 TextView textView = (TextView) convertView.findViewById(R.id.itemTxtImageInfo);
163 textView.setText((String)mList.get(position).get(imageInfo));
164
165 //显示图片缩略图
166 ImageView image = (ImageView) convertView.findViewById(R.id.itemImgImageInfo);
167 Bitmap bm = MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(), Long.parseLong((String)mList.get(position).get(imageID)), Images.Thumbnails.MICRO_KIND, null);
168 image.setImageBitmap(bm);
169
170 return convertView;
171
172
173 本回答被提问者采纳

做一款APP软件,怎么选择才能找到靠谱的开发公司?

找靠谱的开发公司,需要注意的地方有哪些?为什么同样的需求,开发公司报价差别这么大,应该怎么甄选才不会被骗。

做一款APP软件,怎么选择才能找到靠谱的开发公司?

近年来,随着互联网的发展,传统企业的生存环境越来越困难。传统行业纷纷走上了转型之路,不管是被迫转型,还是主动转型,如何转型成功才是关键点。如何通过移动互联网平台把自己的产品和服务销售给9亿多移动互联网用户,如何让自己在互联网的快速发展中占一席之地,在新蛋糕的切分中多拿一些,这是传统企业应该考虑的问题。

随着移动互联网和智能手机的发展,手机app应用已成为移动市场的重要销售手段。传统企业想要更好的实现转型,抢占移动端市场,建议定制开发一款属于自己的APP。通过手机app能很好的实现企业的品牌宣传,产品销售,增强用户粘度,利于企业的宣传推广等等。那么除了企业定制开发app的好处之外呢,下面小编就来说说,怎么才能找到一家靠谱的app定制开发公司。

如何评估一家app定制开发公司是否靠谱是否值得信赖呢?主要看以下几点:

第一、评估app开发公司的实力。评估实力可以从开发团队的规模,项目开发的年限,开发的成功案例,还有开发覆盖的行业。

第二、看app报价的流程。如果你咨询就给你明确的报价,这个就要小心了。一般来说,专业正规的app开发公司的报价,是要先了解了你具体的功能需求,然后根据每项功能的复杂度,所需开发周期来报价的。

第三、看售后服务。专业正规的app开发公司都会有一套完善的售后服务体系的。包括技术指导、bug修复、服务器和程序的日常维护、突发状况的及时处理。

参考技术A 如何选择专业的APP制作公司?
  优秀的售后服务:在找软件开发公司制作一个软件项目的时候,很多时候都是需要进行沟通服务的。如一些软件制作的功能的修改,或者是一个工期的验收,都是需要与项目经理或者是售后人员进行沟通交流,优秀的售后服务会让在开发软件的工作中得到更加便捷的沟通,这样在对于软件的制作会更加便利。
  公司的品牌实力:公司的品牌实力的考量也是从多方面了解,如公司的软件制作的案例的参考,通过案例可以大体了解一下以前的APP软件技术技艺,更加清楚了解一个APP软件公司的软件研发的流程,再如通过了解这个公司的著作专利或者是行业经验中去考量。从多个角度出发,更加有助于了解软件开发公司的品牌。
  APP种类是多种多样,现在的市场上也是有着众多的软件开发公司。用户如果有着开发APP软件的需求,首先最好还是要自己了解所要制作的APP软件的功能,或者是市场定位,根据预算或者是需求,评估考量,选择合适的软件开发公司。
 公司非常多,APP开发团队根据我们的开发经验,做好一个app,需要做很多的工作量。同样的需求,有些公司会只报5万,而有些公司会报10万,20万,我们认为价格不一样,做出来的app以及后期的服务肯定会有很大的差别。接下来,就谈一下,一个5万的app和一个20万的app,做下来到底有什么区别。
1.原型图制作
5万的app可能没有这个环节,设计师直接按照需求把页面做出来,设计师不会仔细研究app的需求,也不会加入自己的想法,需求是死的,设计师的想法也是死的,最后做出来的东西也是死的。而好的app开发公司拥有好的策划团队,每个人都对移动设备的用户访问体验有深入的研究,并用过很多的app,对客户的app会有自己的想法和建议。他们会根据客户的app需求制作文档,和设计师和程序开发人员沟通后再进一步完善文档。
把所有的想法具体实现出来,做好之后,再发给客户确认,和客户沟通后,再交付设计师设计。最后需求是死的,工作人员的想法都是活的,做出来的东西也一定是活的。

2.UI设计
5万的app看起来和原型图的设计风格差不了多少,设计师以完成任务为目的,项目经理或老板以赶工拿到余款为目的。而20万的app聘请的是有经验、有态度的设计师,她会把自己的工作当作自己的事业对待,把每一份设计当作自己的作品对待,不管是设计图,广告图,哪怕是一个按钮都会精心雕琢,他会研究自己设计出来的app用户访问体验怎么样,不同的设备需要做怎样的处理,会研究不同年龄层不同文化水平的人的使用情况。比如一套10个页面的app UI设计,你省成本可以去淘宝找人做,300块搞定,而同样的需求,找好的设计团队,可能要50000元。

3.程序开发
5万的app,开发公司为了赚钱,只能节约成本,要么找没有多少工作经验的人开发,要么直接使用HTML5或phoneGaP、appCaN、weX5等三方工作打包嵌套,用户访问体验极差,基本没有实用价值。目前开发人员平均工资是1.5万以上,假设5万的预算,你想要一个高质量的app,负责任得说:那是不可能的。

4.测试
5万的app开发好之后,员工觉得差不多了,然后就发给客户,客户会发现很多bug,然后app被反复修改,很多bug客户不提,程序员永远也不会主动修改,就是抱着运气让客户自己发现问题,最终客户拿到手可能还是会有很多问题没有实用价值的app。而好的app开发公司有自己的测试团队,会内部经过认真测试后再交给客户,客户拿到手之后,几乎不会发现程序上面的错误,最多就是功能需求、字段上面会有一些出入。

5.发布
5万的app开发好之后,app开发公司会把app发布到几个不知名的应用市场,只要发布上去就好。而好的app开发公司会发布到百度应用市场、腾讯应用市场、小米应用市场、app stor等,另外会精心设计一套app广告图或展示图,并且给客户专门做一个推广网站。确保这个app是活的,而不是在互联网大海里面变成一条死鱼。

6.安全性问题
5万的app后台接口完全不考虑执行效率、安全性、并发性、资源复用性、缓存等问题。比如短信验证码,5万的app开发公司不会考虑时间间隔问题,每天最多发几条,发送之后失效问题,短信发送之前图片二次验证问题,所以容易被黑客攻破,黑客开发一个短信砸蛋,客户在平台冲进去的几千块几万块钱几分钟就打水漂了,而好的app开发公司完全不用担心这些。

7.后期维护
5万的app开发公司也会有后期维护,但是一般出现问题之后,不能马上获得解决。而好的app开发公司拥有好的后期维护服务,保证客户的app能够在应用市场发布,保证后台服务器能稳定(解释:稳固安定;没有变动)运行,app出现bug立马进行修复,因为app出现问题,损失的用户会给公司带来不少的损失。本回答被提问者和网友采纳
参考技术B 如何找到可靠的app定制开发公司?要从以下几个角度来选择:
1、优秀的售后服务
在找第三方开发公司定制APP项目时,都是需要进行沟通服务的。如果需要修改部分功能或工期验收,需要与项目经理或售后员工沟通,优秀的售后服务会让你在软件APP开发过程中的沟通更加容易,从而让APP应用制作更加方便。
2、公司的品牌实力
对公司品牌实力的考虑也是需要从多方面了解的。例如,对公司软件制作案例的参考、可以通过案例可以大致了解开发公司的APP制作技术实力,可以更好地了解一家APP软件公司的软件开发过程。而且,可以通过了解该公司的著作专利或行业经验来考虑。从多个角度来看,这更有助于了解软件开发公司。
3、擅长开发APP的类型
应用程序的种类多种多样,现在市场上也有很多软件开发公司。用户如果对APP软件开发有需求,最好先自行了解要创建的APP软件的功能市场定位,然后根据预算或需求选择相应的软件开发公司。
4、APP开发报价
APP开发团队要根据开发经验做好APP应用程序,需要做很多工作。同样的需求,有些公司只会报价几万元,有些的公司会报几十万。价格不同,制作的app和后期的服务一定是有很大的区别的。
因此,一定要找专业的app开发公司,专注于个性化开发服务,拥有丰富的app开发实践经验,实际案例很多,按需定制,提供来源等。
参考技术C 建议去实际去公司看看,看看是否有技术团队,如果实在无法过去实地考察的可以通过业务员来判断,业务员是否能正确的理解项目需求以及能否提出实质性方案,可以通过以此来了解这家公司的开发能力;我之前的一个项目是在卓高网络开发的,整体还不错,有项目可以联系看看 参考技术D 首先要看您是哪方面的需求了,软件公司有很多,可以去根据自己的需求有针对性的去选择,选择好几家跟您的需求差不多的公司之后,好好了解一下,看能不能懂得您的需求,有问题可以随时联系我们。

以上是关于【Android开发】怎么在ListView中做一个图片批量上传的队列的主要内容,如果未能解决你的问题,请参考以下文章

android开发中appwidget 中的listView的数据怎么刷新

android开发中怎么获取listview中多个edittext的值

ListView和RecyclerView复用详解

android listview 列表表格怎么布局

android新闻客户端问题

android 开发 listview绑定radiobutton控件 如何实现listview列表中只有一个radiobutton被选中?