【问题标题】:Customized listview for dispaly files from sdcard从 sd 卡显示文件的自定义列表视图
【发布时间】:2015-03-10 07:32:40
【问题描述】:

我正在使用自定义列表视图来列出 SD 卡中的文件,每行有两个按钮。下面是我的代码。

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);
         }
                });     

在这里,我可以从特定文件夹的 SD 卡中获取文件列表,并在每行中获取两个按钮。我也收到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。谁能帮帮我。

谢谢

【问题讨论】:

    标签: android android-listview baseadapter


    【解决方案1】:

    在getView()方法中使用:

    viewHolder.bt_encrypt = (Button)view.findViewById(R.id.encrypt);
    viewHolder.bt_encript.setTag(position);
    

    并在 onClick 中使用:

    @Override
        public void onClick(View view) {
            String mStringData = (String) view.getTag();
    

    【讨论】:

      【解决方案2】:
       @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);
               }
           }
      
      
        });  
      

      【讨论】:

        【解决方案3】:

        您不应该在 getView() 方法中设置 OnClickListener,而是使用方法 ListView.setOnItemClickListener()

        在接口实现中可以通过position获取数据项,并显示点击项对应的数据。

        【讨论】:

          【解决方案4】:

          在你的按钮点击监听器中,应该是:

          viewHolder.bt_encrypt.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                  ViweHolder holder = (ViewHolder)v.getTag();
                  System.out.println("inside encryption====>"+ holder.fileName.getText());
             }
          
          }); 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-07
            • 1970-01-01
            相关资源
            最近更新 更多