Android 自定义Listview循环浏览第一个listItem中的所有图像
我有一个列表视图,它是从一个带有customlistview的数据库中填充的……除了我第一次启动“活动”时,一切正常,列表视图上的第一个项目在所有图像中循环,然后将每个图像设置为相应的项。我不知道我做错了什么。请帮忙。我已经通读了stackoverflow的所有答案,但没有一个适合我。以下是我的自定义列表视图: ***编辑:此代码现在工作正常。我修好了Android 自定义Listview循环浏览第一个listItem中的所有图像,android,android-custom-view,android-adapter,android-bitmap,Android,Android Custom View,Android Adapter,Android Bitmap,我有一个列表视图,它是从一个带有customlistview的数据库中填充的……除了我第一次启动“活动”时,一切正常,列表视图上的第一个项目在所有图像中循环,然后将每个图像设置为相应的项。我不知道我做错了什么。请帮忙。我已经通读了stackoverflow的所有答案,但没有一个适合我。以下是我的自定义列表视图: ***编辑:此代码现在工作正常。我修好了 public class FriendsListView extends ArrayAdapter<FriendsRowItem>
public class FriendsListView extends ArrayAdapter<FriendsRowItem> {
Context context;
ArrayList<FriendsRowItem> infoList;
private LayoutInflater inflater = null;
int Resource;
ViewHolder holder;
public FriendsListView(Context context, int resourceId,
ArrayList<FriendsRowItem> items) {
super(context, resourceId, items);
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Resource = resourceId;
infoList = items;
}
/* private view holder class */
private class ViewHolder {
ImageView imageView;
TextView txtTitle;
}
public int getCount() {
return infoList.size();
}
public RowItem getItem(RowItem position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (vi == null) {
vi = inflater.inflate(R.layout.list_item_3, parent, false);
holder = new ViewHolder();
holder.txtTitle = (TextView) vi.findViewById(R.id.title3);
holder.imageView = (ImageView) vi.findViewById(R.id.icon3);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
holder.txtTitle.setText(infoList.get(position).getTitle());
holder.imageView.setImageResource(R.drawable.ic_launcher);
new DownloadImageTask(holder.imageView).execute(infoList.get(position)
.getImage());
return vi;
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
int position;
public DownloadImageTask(ImageView bmImage, int position) {
this.bmImage = bmImage;
this.position = position;
bmImage.setTag(position);
bmImage.setImageBitmap(null);
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon = null;
try {
InputStream in = (InputStream) new java.net.URL(urldisplay)
.getContent();
mIcon = BitmapFactory.decodeStream(in);
} catch (Exception e) {
// Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon;
}
protected void onPostExecute(Bitmap result) {
if (result != null && (bmImage.getTag()).equals(this.position))
bmImage.setImageBitmap(result);
bmImage.setImageBitmap(result);
}
}
公共类FriendsListView扩展了ArrayAdapter{
语境;
ArrayList信息列表;
专用充气机=空;
智力资源;
视窗座;
public FriendsListView(上下文,int resourceId,
ArrayList项目){
超级(上下文、资源ID、项目);
充气器=(充气器)上下文
.getSystemService(上下文布局\充气机\服务);
资源=资源ID;
信息列表=项目;
}
/*私有视图持有者类*/
私有类视窗持有者{
图像视图图像视图;
TextView-txtTitle;
}
public int getCount(){
返回infoList.size();
}
公共行项目getItem(行项目位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
如果(vi==null){
vi=充气机充气(R.layout.list_item_3,父项,假);
holder=新的ViewHolder();
holder.txtTitle=(TextView)vi.findViewById(R.id.title3);
holder.imageView=(imageView)vi.findViewById(R.id.icon3);
vi.setTag(支架);
}否则{
holder=(ViewHolder)vi.getTag();
}
holder.txtitle.setText(infoList.get(position.getTitle());
holder.imageView.setImageResource(R.drawable.ic_启动器);
新建下载ImageTask(holder.imageView).execute(infoList.get(position)
.getImage());
返回vi;
}
私有类DownloadImageTask扩展了AsyncTask{
图像视图bmImage;
内部位置;
公共下载ImageTask(ImageView bmImage,int位置){
this.bmImage=bmImage;
这个位置=位置;
bmImage.setTag(位置);
bmImage.setImageBitmap(空);
}
受保护位图doInBackground(字符串…URL){
字符串urldisplay=url[0];
位图mIcon=null;
试一试{
InputStream in=(InputStream)新建java.net.URL(urldisplay)
.getContent();
mIcon=BitmapFactory.decodeStream(in);
}捕获(例外e){
//Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
返回mIcon;
}
受保护的void onPostExecute(位图结果){
如果(result!=null&&(bmImage.getTag()).equals(this.position))
bmImage.setImageBitmap(结果);
bmImage.setImageBitmap(结果);
}
}
以及如何使用JSON填充列表视图:
class RetrieveFriendsTask extends AsyncTask<Void, Void, Void> {
ArrayList<FriendsRowItem> FriendList = new ArrayList<FriendsRowItem>();
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
if (pDialog != null) {
pDialog.dismiss();
}
// Showing progress dialog
else {
pDialog = new ProgressDialog(Friends.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
}
@Override
protected Void doInBackground(Void... arg0) {
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("eposta", email));
pairs.add(new BasicNameValuePair("sifre", pass));
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET, pairs);
Log.d("Response: ", "> " + jsonStr);
if (jsonStr != null) {
JSONObject jsonObj = null;
try {
jsonObj = new JSONObject(jsonStr);
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
JSONObject obj = jsonObj.getJSONObject("data");
friends = obj.getJSONArray(TAG_EVENTS);
for (int i = 0; i < friends.length(); i++) {
friend = new FriendsRowItem();
JSONObject c = friends.getJSONObject(i);
nick = c.optString("nick");
// friend.setTitle(c.optString("nick"));
img = c.optString("url_resim");
// friend.setImage(c.optString("url_resim"));
friend.setTitle(nick);
friend.setImage(img);
FriendList.add(friend);
}
}
catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
protected void onPostExecute(Void result) {
if (pDialog.isShowing())
pDialog.dismiss();
adapter = new FriendsListView(Friends.this, R.layout.list_item_3,
FriendList);
lvfriends.setAdapter(adapter);
OnItemClickListener myListViewClicked = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
FriendsRowItem name = (FriendsRowItem) parent
.getItemAtPosition(position);
Intent i = new Intent(Friends.this, FriendsDisplay.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra("FriendName", name.toString());
startActivity(i);
}
};
lvfriends.setOnItemClickListener(myListViewClicked);
}
}
类检索FriendsTask扩展了异步任务{
ArrayList FriendList=新建ArrayList();
私人对话;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
如果(pDialog!=null){
pDialog.disclose();
}
//显示进度对话框
否则{
pDialog=newprogressdialog(Friends.this);
setMessage(“请稍候…”);
pDialog.setCancelable(假);
pDialog.show();
}
}
@凌驾
受保护的Void doInBackground(Void…arg0){
//创建服务处理程序类实例
ServiceHandler sh=新的ServiceHandler();
列表对=新的ArrayList();
添加(新的BasicNameValuePair(“eposta”,电子邮件));
添加(新的BasicNameValuePair(“sifre”,pass));
//向url发出请求并获得响应
字符串jsonStr=sh.makeServiceCall(url,ServiceHandler.GET,pairs);
Log.d(“响应:”、“>”+jsonStr);
if(jsonStr!=null){
JSONObject jsonObj=null;
试一试{
jsonObj=新的JSONObject(jsonStr);
}捕获(JSONException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
试一试{
JSONObject obj=jsonObj.getJSONObject(“数据”);
friends=obj.getJSONArray(标记事件);
for(int i=0;i