【问题标题】:ArrayList sorting AndroidArrayList 排序 Android
【发布时间】:2015-06-01 07:38:02
【问题描述】:
private List<String> mitem = null;
private List<String> mpath = null;
String dirPath = Environment.getExternalStorageDirectory().getPath();

private void getDir() {
    mitem = new ArrayList<String>();
    mpath = new ArrayList<String>();
    File f = new File(dirPath);
    File[] files = f.listFiles();
    for (int i = 0; i < files.length; i++) {
        File file = files[i];
        if (!file.isHidden() && file.canRead()) {
            mpath.add(file.getPath());
            if (file.isDirectory()) {
                // Folder names
                mitem.add(file.getName() + "/");
            } else {
                // File name
                mitem.add(file.getName());

            }
        }
    }
    fileList = new FileManagerAdapter(this, mitem, mpath);
    listview.setAdapter(fileList);
    listview.setOnItemClickListener(onitemclick);
}

这里我将文件和文件夹列表添加到 ArrayList 的某个路径上,如何首先对所有文件夹进行排序,最后对所有文件进行排序。我应该使用什么样的排序技术来实现这一点。提前致谢。

更新:CustomAdapter

public class FileManagerAdapter extends ArrayAdapter<String> {
    private List<String> mitem;
    private Context mContext;

    public FileManagerAdapter(Context context, List<String> item,
            List<String> path) {
        super(context, R.layout.fileadapter_list, item);
        this.mContext = context;
        this.mitem = item;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater mInflater = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.fileadapter_list, null);
        }
        TextView txtTitle = (TextView) convertView.findViewById(R.id.txt);
        txtTitle.setText(mitem.get(position));

        return convertView;
    }
}

【问题讨论】:

  • 您目前使用的任何挑战方法是否面临?
  • 是的,文件和文件夹都是混合的。我希望它以一种排序的方式。 @kishorJoshi

标签: android arraylist android-arrayadapter


【解决方案1】:

我正在使用以下代码对类型也进行了排序的文件进行排序:

protected void sortByNmDes(){
         fAdapter = new FolderAdapter(getActivity(), R.layout.file_row, FileList);
         fAdapter.sort(new Comparator<File>() {

             @Override
                public int compare(File lhs, File rhs) {
                    // TODO Auto-generated method stub
                    if(lhs.isDirectory() && !rhs.isDirectory()){
                            return -1;
                    }else if(!lhs.isDirectory() && rhs.isDirectory()){
                            return 1;
                    }
                    return rhs.getName().toLowerCase().compareTo(lhs.getName().toLowerCase());
                }
        });
         setListAdapter(fAdapter);
     }

FileList 是文件的数组列表。

【讨论】:

  • 你能解释一下吗..因为我使用的是自定义适配器。
【解决方案2】:

使用这种方法 List tempFilesList=>存储所有文件名。 List tempDirectoriesList=>存储所有目录名。 List FinalList=>添加 tempDirectoriesList 然后将 tempFilesList 添加到这个 FinalList。

我想我不需要告诉如何将 tempFilesList 和 tempDirectoriesList 添加到 FinalList。

【讨论】:

  • mitem.addAll(mitem_folders); mitem.addAll(mitem_files);然后我将适配器设置为使用 mitem,但文件和文件夹仍然是混合的。
猜你喜欢
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 2014-10-31
  • 2013-05-09
  • 2018-09-07
  • 2016-11-16
  • 2017-11-05
  • 2015-04-18
相关资源
最近更新 更多