ListView第一张图片有的时候和第二张重叠了,但是单独测试的时候又没有这个问题

ListView第一张图片有的时候和第二张重叠了,但是单独测试的时候又没有这个问题

IndexFrame

package com.example.noel.taskproj.frame;


import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.Toast;

import com.example.noel.taskproj.MainActivity;
import com.example.noel.taskproj.adapter.IndexListAdapter;
import com.example.noel.taskproj.bean.IndexBean;
import com.example.noel.taskproj.adapter.IndexGridAdapter;
import com.example.noel.taskproj.R;
import com.example.noel.taskproj.bean.LessonInfo;
import com.example.noel.taskproj.bean.LessonResult;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by NOEL on 2018/12/2.
 */

public class IndexFrame extends Fragment implements AdapterView.OnItemClickListener {
    private View view;
    private GridView gridView;
    private ListView listView;
    private ProgressDialog dialog;
    private static final String PATH = "http://www.imooc.com/api/shopping?type=11";

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.frame_index, null);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initView();
        initAdapter();
        new ListTask().execute(PATH);
        initList();

    }

    public void initView() {
        gridView = (GridView) view.findViewById(R.id.index_gridView);
        listView = (ListView) view.findViewById(R.id.index_list_view);
        dialog = new ProgressDialog(getActivity());
        dialog.setTitle("提示");
        dialog.setMessage("正在加载中....");
    }

    public void initList() {
        listView.setOnItemClickListener(this);
    }

    public void initAdapter() {
        IndexGridAdapter indexGridAdapter = new IndexGridAdapter(getActivity(), mList());
        gridView.setAdapter(indexGridAdapter);
    }

    public List<IndexBean> mList() {
        List<IndexBean> indexBeanList = new ArrayList<IndexBean>();
        IndexBean indexBean = new IndexBean();
        indexBean.setIco(R.mipmap.fly1);
        indexBean.setName("机票");
        indexBeanList.add(indexBean);

        indexBean = new IndexBean();
        indexBean.setIco(R.mipmap.car);
        indexBean.setName("车票");
        indexBeanList.add(indexBean);

        indexBean = new IndexBean();
        indexBean.setIco(R.mipmap.autombile1);
        indexBean.setName("汽车");
        indexBeanList.add(indexBean);

        indexBean = new IndexBean();
        indexBean.setIco(R.mipmap.cake);
        indexBean.setName("蛋糕");
        indexBeanList.add(indexBean);

        indexBean = new IndexBean();
        indexBean.setIco(R.mipmap.food);
        indexBean.setName("美食");
        indexBeanList.add(indexBean);

        indexBean = new IndexBean();
        indexBean.setIco(R.mipmap.watch);
        indexBean.setName("手表");
        indexBeanList.add(indexBean);

        indexBean = new IndexBean();
        indexBean.setIco(R.mipmap.cp);
        indexBean.setName("电脑");
        indexBeanList.add(indexBean);

        indexBean = new IndexBean();
        indexBean.setIco(R.mipmap.phone);
        indexBean.setName("手机");
        indexBeanList.add(indexBean);

        return indexBeanList;
    }

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
        switch (position) {
            case 2:
                getFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.frame_layout, new PrawnsFrame()).commit();
                break;
        }
    }

    class ListTask extends AsyncTask<String, Void, String> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            dialog.show();
        }

        @Override
        protected String doInBackground(String... strings) {
            return request(PATH);
        }

        private String request(String path) {
            try {
                URL url = new URL(path);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setConnectTimeout(30000);
                connection.setRequestMethod("GET");
                connection.connect();
                int responseCode = connection.getResponseCode();
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    InputStreamReader inputStreamReader = new InputStreamReader(connection.getInputStream());
                    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                    StringBuilder stringBuilder = new StringBuilder();
                    String line;
                    while ((line = bufferedReader.readLine()) != null) {
                        stringBuilder.append(line);
                    }
                    return stringBuilder.toString();
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            LessonResult lessonResult = null;
            if (result != null) {
                lessonResult = new LessonResult();
                try {
                    JSONObject jsonObject = new JSONObject(result);
                    lessonResult.setStatus(jsonObject.getInt("status"));
                    lessonResult.setMsg(jsonObject.getString("msg"));
                    List<LessonInfo> lessonInfos = new ArrayList<>();
                    JSONArray dataArray = jsonObject.getJSONArray("data");
                    for (int i = 0; i < dataArray.length(); i++) {
                        JSONObject tempJSONObject = (JSONObject) dataArray.get(i);
                        LessonInfo lessonInfo = new LessonInfo();
                        lessonInfo.setName(tempJSONObject.getString("name"));
                        lessonInfo.setDescription(tempJSONObject.getString("description"));
                        lessonInfo.setPrice("¥" + tempJSONObject.getString("price"));
                        lessonInfo.setAction(tempJSONObject.getString("action"));
                        lessonInfo.setCount("已售" + tempJSONObject.getString("price"));
                        lessonInfo.setImg(tempJSONObject.getString("img"));
                        lessonInfos.add(lessonInfo);
                        lessonResult.setLessonInfos(lessonInfos);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else if (result == null) {
                Toast.makeText(getActivity(), "请求数据失败....", Toast.LENGTH_SHORT).show();
            }
            listView.setAdapter(new IndexListAdapter(getActivity(), lessonResult.getLessonInfos()));
            dialog.dismiss();
        }
    }
}


IndexListAdapter

package com.example.noel.taskproj.adapter;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.noel.taskproj.R;
import com.example.noel.taskproj.bean.DownImage;
import com.example.noel.taskproj.bean.LessonInfo;

import java.util.List;

/**
 * Created by NOEL on 2018/12/3.
 */

public class IndexListAdapter extends BaseAdapter {
    private Context context;
    private List<LessonInfo> infos;

    public IndexListAdapter(Context context, List<LessonInfo> infos) {
        this.context = context;
        this.infos = infos;
    }

    @Override
    public int getCount() {
        return infos.size();
    }

    @Override
    public Object getItem(int position) {
        return infos.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
        if (convertView == null) {
            viewHolder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.item_list, null);
            viewHolder.icon = (ImageView) convertView.findViewById(R.id.list_icon);
            viewHolder.title = (TextView) convertView.findViewById(R.id.list_title);
            viewHolder.msg = (TextView) convertView.findViewById(R.id.list_msg);
            viewHolder.price = (TextView) convertView.findViewById(R.id.list_price);
            viewHolder.action = (TextView) convertView.findViewById(R.id.list_action);
            viewHolder.count = (TextView) convertView.findViewById(R.id.list_count);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        LessonInfo lessonInfo = infos.get(position);
        viewHolder.icon.setImageResource(R.mipmap.ic_launcher);
        viewHolder.title.setText(lessonInfo.getName());
        viewHolder.msg.setText(lessonInfo.getDescription());
        viewHolder.price.setText(lessonInfo.getPrice());
        viewHolder.action.setText(lessonInfo.getAction());
        viewHolder.count.setText(lessonInfo.getCount());

        DownImage downImage = new DownImage(infos.get(position).getImg().toString());
        downImage.loadImage(new DownImage.ImageCallBack() {
            @Override
            public void getDrawable(Drawable drawable) {
                viewHolder.icon.setImageDrawable(drawable);
            }
        });


        return convertView;
    }



    public class ViewHolder {
        private ImageView icon;
        private TextView title;
        private TextView msg;
        private TextView price;
        private TextView action;
        private TextView count;
    }
}

LessonInfo

package com.example.noel.taskproj.bean;

/**
 * Created by NOEL on 2018/12/3.
 */

public class LessonInfo {
    private String name;
    private String img;
    private String count;
    private String price;
    private String description;
    private String action;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getImg() {
        return img;
    }

    public void setImg(String img) {
        this.img = img;
    }

    public String getCount() {
        return count;
    }

    public void setCount(String count) {
        this.count = count;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }
}

LessonResult

package com.example.noel.taskproj.bean;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by NOEL on 2018/12/3.
 */

public class LessonResult {
    private int status;
    private String msg;
    List<LessonInfo> lessonInfos=new ArrayList<>();

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public List<LessonInfo> getLessonInfos() {
        return lessonInfos;
    }

    public void setLessonInfos(List<LessonInfo> lessonInfos) {
        this.lessonInfos = lessonInfos;
    }
}

DownImage  自定义图片加载类

package com.example.noel.taskproj.bean;

import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;

import java.io.IOException;
import java.net.URL;

/**
 * Created by NOEL on 2018/12/3.
 */

public class DownImage {
    public String image_path;

    public DownImage(String image_path) {
        this.image_path = image_path;
    }

    public void loadImage(final ImageCallBack callBack){
        final Handler handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                Drawable drawable= (Drawable) msg.obj;
                callBack.getDrawable(drawable);
            }
        };
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Drawable drawable=Drawable.createFromStream(new URL(image_path).openStream(),"");
                    Message message=Message.obtain();
                    message.obj=drawable;
                    handler.sendMessage(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }


    public interface ImageCallBack {
        public void getDrawable(Drawable drawable);
    }

}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

ListView第一张图片有的时候和第二张重叠了,但是单独测试的时候又没有这个问题”不明白是什么意思。另你需要确认一下listView的高度不能用wrap_content否则会重复计算,绘图,可能会导致重复加载。或者你提交作业时,在显示处,说明你的情况,老师会给你对应的批复说明的。祝:学习愉快

  • 零织 提问者 #1
    是我重写了ListView的问题,谢谢
    2018-12-03 12:00:21
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android网络操作与数据存储2018版
  • 参与学习           人
  • 提交作业       307    份
  • 解答问题       1613    个

本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师