Search code examples
androidandroid-listviewbaseadapter

Customized listview for dispaly files from sdcard


I am using Customized listview to list files from SDcard with two buttons in each row. Below is my code.

public class SDcardFiles extends BaseAdapter{

    private ArrayList<File> mSdFilesList;
    private LayoutInflater mInflator;
    File myfilename;

    public SDcardFiles(File filename){

      this.myfilename = filename;
      mSdFilesList = new ArrayList<File>();
      mInflator = FileList.this.getLayoutInflater();

      File list[] = myfilename.listFiles();

    for( int i=0; i< list.length; i++)
      {
      File f = list[i].getAbsoluteFile();
      mSdFilesList.add(f);      
     }      
    }    

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

        }

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

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

      @Override
     public View getView(int position, View view, ViewGroup parent) {
    ViewHolder viewHolder;
     if (view == null) {
       view = mInflator.inflate(R.layout.listitem_sdfiles, null);
       viewHolder = new ViewHolder();
       viewHolder.fileName = (TextView)view.findViewById(R.id.file_name);
       viewHolder.bt_encrypt = (Button)view.findViewById(R.id.encrypt);
       viewHolder.bt_decrypt = (Button)view.findViewById(R.id.decrypt);
       view.setTag(viewHolder);

          } else {
                 viewHolder = (ViewHolder) view.getTag();
          }

        mFileName = mSdFilesList.get(position);
        mFN = mFileName.getName();
        System.out.println("filename in position====>"+mFN);
        if(mFN != null && mFN.length() > 0){
         viewHolder.fileName.setText(mFN);
         }

    viewHolder.bt_encrypt.setOnClickListener(new OnClickListener() {
    @Override
     public void onClick(View v) {
        System.out.println("inside encryption====>"+mFN);
         }
                });     

Here I am able to get a list of files from SDcard of particular folder and two buttons in each row. I am also getting name of the file from position of the list(i.e Line number : 35). but problem is when i clicked a button of particular row it is always printing last row file name but not that row which i pressed button. Can anyone help me.

Thanks


Solution

  •  @Override
        public View getView(int position, View view, ViewGroup parent) {
        ViewHolder viewHolder;
       if (view == null) 
      {
          view = mInflator.inflate(R.layout.listitem_sdfiles, null);
          viewHolder = new ViewHolder();
          viewHolder.fileName = (TextView)view.findViewById(R.id.file_name);
          viewHolder.bt_encrypt = (Button)view.findViewById(R.id.encrypt);
          viewHolder.bt_decrypt = (Button)view.findViewById(R.id.decrypt);
          view.setTag(viewHolder);
    
          } else {
                  viewHolder = (ViewHolder) view.getTag();
                }
    
          mFileName = mSdFilesList.get(position);
          mFN = mFileName.getName();
          System.out.println("filename in position====>"+mFN);
          if(mFN != null && mFN.length() > 0)
          {
            viewHolder.fileName.setText(mFN);
    
            viewHolder.bt_encript.setTag(mFN);
       }
    
     viewHolder.bt_encrypt.setOnClickListener(new OnClickListener() {
         @Override
         public void onClick(View v) {
    
             if(view.getTag()!= null)
             {
                String fileName =  (String) view.getTag();
                System.out.println("inside encryption====>"+fileName);
             }
         }
    
    
      });