0

我开发下载应用程序,当我点击保存按钮然后在后台下载过程但按钮点击不显示正确的位置。我有 listView ,我在其中膨胀一行包含 Imageview 和按钮和进度条现在我想处理按钮的点击事件在适配器中编码,我也能够获得按钮的位置。但是在这里,当我单击按钮时,我正在更改按钮的图像,它的工作正常问题是当我滚动视图时,它再次像以前一样更改按钮的图像,因为 getview() 方法每次都回收视图。以及如何全部下载视频并保存SD卡。我的代码如下::

public class TestHopeListNew extends Activity {
    ListView lv;
    ArrayList<Url_Dto> list = new ArrayList<Url_Dto>();
    MyListAdapter adtf;
    public static String prf_date_view = "";
    String str_start;
    Button mainDownloadBtn;
    public static SQLiteDatabase db;
    ProgressBar freePr;
    String name;
    File download;
    int i = 0;
    private ArrayList<ProgressBarSeek> progreeSeekList;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_hope_list_new);
        progreeSeekList = new ArrayList<ProgressBarSeek>();
        list = DBAdapter.getUrl_Detail();
        Log.v("log_tag", "list  :: " + list.size());
        lv = (ListView) findViewById(R.id.main_list_meet);
        mainDownloadBtn = (Button) findViewById(R.id.not_shown);
        freePr = (ProgressBar) findViewById(R.id.progressBar1);
        adtf = new MyListAdapter(this);
        lv.setAdapter(adtf);
        //adtf.notifyDataSetChanged();
        SqliteAdpter dba = SqliteAdpter
                .getAdapterInstance(getApplicationContext());
        dba.createdatabase();
        db = dba.openDataBase();
        BusyExtMemory();
        mainDownloadBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                adtf.setAllDownload();
            }
        });

    }

    public class MyListAdapter extends BaseAdapter {
        private LayoutInflater mInflater;
        ProgressBar pr;
        ProgressBar[] prArray = new ProgressBar[list.size()];
        Button cl, dl;
        ImageView im;
        DownloadFileFromURL downloadFileFromURL;


        public MyListAdapter(Context context) {
            mInflater = LayoutInflater.from(context);

        }

        public int getCount() {
            return list.size();
        }

        public Object getItem(int position) {
            return list.get(position);
        }

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

        public void setAllDownload() {
            if (prArray.length > 0) {
                for (int i = 0; i < prArray.length; i++) {
                    try {
                        Thread.sleep(4000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    Log.v("log_tag", "list.get(i).url_video   "
                            + list.get(i).url_video);

                    downloadFileFromURL.execute(pr, list.get(i).url_video, i);
                }
            }
        }

        public View getView(final int position, View convertView,
                ViewGroup parent) {
            convertView = mInflater.inflate(R.layout.custome_list_view, null);

            cl = (Button) convertView.findViewById(R.id.cancle_sedual);
            dl = (Button) convertView.findViewById(R.id.download_sedual);
            pr = (ProgressBar) convertView.findViewById(R.id.listprogressbar);
            prArray[position] = pr;
            im = (ImageView) convertView.findViewById(R.id.list_image);
            im.setImageResource(list.get(position).images[position]);


            downloadFileFromURL = new DownloadFileFromURL(dl, cl);
            cl.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    Log.v("log_tag", "Cancle Button Click");

                    dl.setVisibility(View.VISIBLE);
                    cl.setVisibility(View.GONE);
                    downloadFileFromURL.cancel(true);
                     downloadFileFromURL.downloadFile();
                    pr.setProgress(0);
                }
            });

            dl.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    str_start = list.get(position).url_video;
                    dl.setVisibility(View.GONE);
                    cl.setVisibility(View.VISIBLE);
                    Log.v("log_tag", "Start Button Click ");
                    //downloadFileFromURL = new DownloadFileFromURL(dl, cl);
                    downloadFileFromURL.execute(pr, str_start, position);
                }
            });
            getProgress(pr, position, dl, cl);
            return convertView;
        }

    }

    class DownloadFileFromURL extends AsyncTask<Object, String, Integer> {

        int count = 0;
        ProgressDialog dialog;
        ProgressBar progressBar;
        int myProgress;
        int position;
        Button start, cancel;
        boolean download1 = false;

        public DownloadFileFromURL(Button start, Button cancel) {
            this.start = start;
            this.cancel = cancel;
        }

        /**
         * Before starting background thread Show Progress Bar Dialog
         * */

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            ProgressBar progressBar;
            download1 = true;

        }

        public void downloadFile() {
            this.download1 = false;

        }

        @Override
        protected void onCancelled() {
            super.onCancelled();

        }

        /**
         * Downloading file in background thread
         * */
        @Override
        protected Integer doInBackground(Object... params) {
            int count;
            progressBar = (ProgressBar) params[0];
            position = (Integer) params[2];
            /*
             * try { Thread.sleep(500); } catch (InterruptedException e) {
             * e.printStackTrace(); }
             */
            try {

                URL url = new URL((String) params[1]);

                name = ((String) params[1]).substring(((String) params[1])
                        .lastIndexOf("/") + 1);
                // Log.v("log_tag", "name Substring ::: " + name);
                URLConnection conection = url.openConnection();
                conection.connect();
                // getting file length
                int lenghtOfFile = conection.getContentLength();

                // input stream to read file - with 8k buffer
                InputStream input = new BufferedInputStream(url.openStream(),
                        8192);
                download = new File(Environment.getExternalStorageDirectory()
                        + "/download/");
                if (!download.exists()) {
                    download.mkdir();
                }
                String strDownloaDuRL = download + "/" + name;
                Log.v("log_tag", " down url   " + strDownloaDuRL);
                FileOutputStream output = new FileOutputStream(strDownloaDuRL);

                byte data[] = new byte[1024];

                long total = 0;

                while ((count = input.read(data)) != -1) {
                    if (this.download1) {
                        if (isCancelled()) {
                            break;
                        }

                        total += count;

                        // writing data to file
                        progressBar
                                .setProgress((int) ((total * 100) / lenghtOfFile));
                        output.write(data, 0, count);
                        setProgress(progressBar, position, start, cancel, this);
                    } else {
                        File delete = new File(strDownloaDuRL);
                        delete.delete();
                    }
                }
                // flushing output
                output.flush();

                // closing streams
                output.close();
                input.close();

            } catch (Exception e) {
                Log.e("Error: ", e.getMessage());
            }
            return 0;

        }

        /**
         * Updating progress bar
         * */
        protected void onProgressUpdate(String... values) {

            super.onProgressUpdate(values);
            BusyExtMemory();

            // pDialog.setProgress(Integer.parseInt(progress[0]));
        }

        /**
         * After completing background task Dismiss the progress dialog
         * **/
        protected void onPostExecute(String file_url) {

            Log.v("log", "login  ::: 4::: " + download);
            String videoPath = download + "/" + name;
            String chpName = name;
            Log.v("log_tag", "chpName  ::::" + chpName + "  videoPath "
                    + videoPath);
            db.execSQL("insert into videoStatus (chapterNo,videoPath) values(\""
                    + chpName + "\",\"" + videoPath + "\" )");

        }

    }

    private void setProgress(final ProgressBar pr, final int position,
            final Button Start, final Button cancel,
            final DownloadFileFromURL downloadFileFromURL) {
        ProgressBarSeek pbarSeek = new ProgressBarSeek();
        pbarSeek.setPosition(position);
        pbarSeek.setProgressValue(pr.getProgress());
        // Log.v("log_tag", position + "  progress  " + pr.getProgress());
        progreeSeekList.add(pbarSeek);
        cancel.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Log.v("log_tag", "Cancle Button Click Set progress");
                Start.setVisibility(View.VISIBLE);
                cancel.setVisibility(View.GONE);
                downloadFileFromURL.cancel(true);
                // downloadFileFromURL.downloadFile();
                downloadFileFromURL.cancel(true);
                pr.setProgress(0);

            }
        });
        Start.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.v("log_tag", "Start Button Click set Progress");
                str_start = list.get(position).url_video;
                Start.setVisibility(View.GONE);
                cancel.setVisibility(View.VISIBLE);
                Log.v("log_tag", "str_start  " + str_start);
                //
                // new DownloadFileFromURL().execute(str_start);
                DownloadFileFromURL downloadFileFromU = new DownloadFileFromURL(
                        Start, cancel);
                downloadFileFromU.execute(pr, str_start, position);
            }
        });
    }

    private void getProgress(ProgressBar pr, int position, Button dl, Button cl) {
        if (progreeSeekList.size() > 0) {
            for (int j = 0; j < progreeSeekList.size(); j++) {
                if (position == progreeSeekList.get(j).getPosition()) {
                    pr.setProgress(progreeSeekList.get(j).getProgressValue());
                    dl.setVisibility(View.GONE);
                    cl.setVisibility(View.VISIBLE);
                }
            }
        }
    }

    public String TotalExtMemory() {
        StatFs statFs = new StatFs(Environment.getExternalStorageDirectory()
                .getAbsolutePath());
        int Total = (statFs.getBlockCount() * statFs.getBlockSize()) / 1048576;
        Log.v("log_tag", "TotalExtMemory    " + Total);
        String strI = Integer.toString(Total);
        return strI;
    }

    public String FreeExtMemory() {
        StatFs statFs = new StatFs(Environment.getExternalStorageDirectory()
                .getAbsolutePath());
        int Free = (statFs.getAvailableBlocks() * statFs.getBlockSize()) / 1048576;
        String strI = Integer.toString(Free);
        Log.v("log_tag", "FreeExtMemory    " + strI);

        return strI;
    }

    public String BusyExtMemory() {
        StatFs statFs = new StatFs(Environment.getExternalStorageDirectory()
                .getAbsolutePath());
        int Total = (statFs.getBlockCount() * statFs.getBlockSize()) / 1048576;
        int Free = (statFs.getAvailableBlocks() * statFs.getBlockSize()) / 1048576;
        int Busy = Total - Free;
        String strI = Integer.toString(Busy);
        freePr.setProgress(Integer.parseInt(strI));
        Log.v("log_tag", "BusyExtMemory    " + strI);
        return strI;
    }
}

我的屏幕截图演示显示::在此处输入图像描述

4

1 回答 1

1

尝试改变这个

cl.setVisibility(View.GONE);

v.setVisibility(View.GONE);

在你的按钮上点击

在您想要处理您刚刚单击的实际按钮的所有按钮 onClicks 上,使用 View v

于 2013-03-04T06:35:26.263 回答