zoukankan      html  css  js  c++  java
  • Android自定义用于浏览文件的Adapter

    我自用的好些应用都要选择文件,但总不能每次写个Activity或ListView去浏览文件吧。所以写个Adapter,这样以后再有用到文件浏览或文件选择的话直接把这个Adapter放进ListView或GridView就行了,这样比较方便。

    Adapter:

    public class KFileAdapter extends BaseAdapter{
    
        
        private File mFile;
        private List<File> mList;
        private Context mContext;
        private FileSelectListener mListener;
        
        public KFileAdapter(Context context,FileSelectListener listener){
            mContext=context;
            mListener=listener;
            mFile=Environment.getExternalStorageDirectory();
            mList=new ArrayList<File>();
            try {
                getFileList(mList, mFile);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                Toast.makeText(mContext, "请检查SD卡", Toast.LENGTH_SHORT).show();
            }
        }
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mList.size();
        }
        
        private void getFileList(List<File> list,File dir) throws Exception {
            File[] array=dir.listFiles();
            list.clear();
            if(!dir.equals(Environment.getExternalStorageDirectory()))
            list.add(dir.getParentFile());
            for (File file : array) {
                list.add(file);
            }
        }
        
        private void listFile() throws Exception{
            getFileList(mList, mFile);
            notifyDataSetChanged();
        }
    
        @Override
        public File getItem(int arg0) {
            // TODO Auto-generated method stub
            return mList.get(arg0);
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            if(convertView==null){
                FrameLayout fl=new FrameLayout(mContext);
                convertView=fl;
                fl.setPadding(8, 8, 8, 8);
                fl.setBackgroundColor(0xffdddddd);
                TextView tmp=new TextView(mContext);
                fl.setTag(new ViewTag(getItem(position), tmp));
                fl.addView(tmp, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                convertView.setOnClickListener(new OnClickListener() {
                    
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        File tag=((ViewTag)v.getTag()).getFile();
                        if(tag.isDirectory()){
                            mFile=tag;
                            try {
                                listFile();
                                mFile=tag;
                            } catch (Exception e) {
                                // TODO Auto-generated catch block
                                Toast.makeText(mContext, "无法打开", Toast.LENGTH_SHORT).show();
                            }
                            
                        }else
                            mListener.fileSelect(tag);
                    }
                });
            }
            ViewTag tag=(ViewTag)convertView.getTag();
            tag.setFile(getItem(position));
            TextView tmp=tag.getTextView();
            if(!mFile.equals(Environment.getExternalStorageDirectory())&&position==0){
            
            tmp.setText("...");
            }else{
                tmp.setText(getItem(position).getName());
            }
            
            return convertView;
        }
        
        
        public interface FileSelectListener{
            public abstract void fileSelect(File file);
        }
        
        private class ViewTag{
            private File file;
            private TextView textView;
            public ViewTag(File file,TextView textView){
                this.file=file;
                this.textView=textView;
            }
            public File getFile() {
                return file;
            }
            public void setFile(File file) {
                this.file = file;
            }
            public TextView getTextView() {
                return textView;
            }
            public void setTextView(TextView textView) {
                this.textView = textView;
            }
            
            
            
        }
    
    }

    构造函数里的监听器里的代码在用户点击文件(非文件夹)时执行,想要点击文件夹执行的话改下

    convertView.setOnClickListener(new OnClickListener() {
                   
                    @Override
                    public void onClick(View v) {

             //添加你的代码
                             });

    测试用的Activity:

    public class MainActivity extends Activity {
        
        
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
           
            ListView v=(ListView)findViewById(R.id.listView1);
            
            v.setAdapter(new KFileAdapter(this, new FileSelectListener() {
                
                @Override
                public void fileSelect(File file) {
                    // TODO Auto-generated method stub
                    Log.i("kagami", file.getName());
                }
            }));
            
            
         GridView g=(GridView)findViewById(R.id.gridView1);
            
            g.setAdapter(new KFileAdapter(this, new FileSelectListener() {
                
                @Override
                public void fileSelect(File file) {
                    // TODO Auto-generated method stub
                    Log.i("kagami", file.getName());
                }
            }));
         
        }
    
       
        
        
    }

    上半是ListView,下半是GridView:

    image

  • 相关阅读:
    移动端开发常遇问题解答
    CSS属性小结之--半透明处理
    jquery事件代理
    sprite图在移动端的使用
    vertical-align及IE7下的inline-block
    图片延迟加载
    iOS NSInteger/NSUInteger与int/unsigned int、long/unsigned long之间的区别!
    GCD深入理解(1)
    iOS 开发图片资源选择png格式还是jpg格式
    iOS沙盒(sandbox)机制及获取沙盒路径
  • 原文地址:https://www.cnblogs.com/kagami/p/2786245.html
Copyright © 2011-2022 走看看