2013-03-04 2 views
0

Я разрабатываю приложение для загрузки и когда я нажимаю кнопку «Сохранить», а затем загружаю процесс в фоновом режиме, но кнопка не показывает правильную позицию. У меня есть listView, в котором я раздуваю строку, содержащую Imageview и кнопку и панель прогресса. Теперь я хочу обработать событие click который закодирован в адаптере, и я также могу получить положение кнопки. Но здесь, когда я нажимаю на кнопку, я меняю изображение кнопки, ее работа прекрасна, когда я просматриваю представление, он снова меняет образ кнопки, как было раньше, из-за метода getview() каждый раз, когда он обращается к корзине. все Загрузить видео и сохранить SD карту. мой код ниже ::Как загрузить видеофайл с сервера и сохранить 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; 
    } 
} 

My Screen Demo Выстрел Display :: enter image description here

+0

вы можете быть более конкретным в том, что вы спрашиваете? – ElefantPhace

+0

Привет, ElefantPhace, я нажимаю зеленую кнопку (кнопка загрузки), не меняет событие кнопки, а загружает в фоновом режиме. Start.how to change button event show and visible. – crickpatel0024

ответ

1

попробуйте изменить этот

cl.setVisibility(View.GONE); 

в

v.setVisibility(View.GONE); 

в вашей кнопки OnClick

На всех ваших кнопках onClicks, где вы хотите иметь дело с фактической кнопкой, которую вы только что нажали, используйте View v

+0

Спасибо !!! Кнопка Отображение события и видимая кнопка cancle нажимают кнопку, а не показывают кнопку загрузки (dl), а не статус progresscle progressbar и не удаляются файлы из sdcard.how, чтобы изменить мой код.пожалуйста, помогите мне !!! – crickpatel0024

+0

Простите, что вы только что сказали? – ElefantPhace

+0

Я говорю, что я нажимаю зеленую кнопку, тогда появляется кнопка cancle, но когда кнопка кнопки cancle не отображается, зеленая кнопка видна, а cl кнопка не работает, не работает progressbar cancle и не удаляет файл загрузки с SDK. – crickpatel0024

Смежные вопросы