Как отсортировать по алфавиту файлы моего listView и интегрировать адаптер списка? Я использую специальный адаптер - PullRequest
2 голосов
/ 08 октября 2019

Как отсортировать по алфавиту файлы моего списка? Я использую пользовательский адаптер, уже пробовал несколько вещей, но ничего не работает, я читал, и я думаю, что я должен сделать список адаптеров? Если я прав, может кто-нибудь помочь мне интегрировать адаптер списка в мой код. Представление списка с использованием специального адаптера и модели данных.

MainActivity.java

 ArrayList<DataModel> dataModels;
 ListView list2;
 private static CustomAdapter adapter;

   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        RelativeLayout rootView = (RelativeLayout) findViewById(id.relativeLayout1);
        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.CENTER_HORIZONTAL);
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        rootView.setSystemUiVisibility(8);



final File carpeta = new File("/storage/emulated/0/Android/data/cc.openframeworks.androidMultiOFActivitiesExample/files/xml");


        dataModels= new ArrayList<>();
        listarFicherosPorCarpeta(carpeta);

        ficheros = list.toArray(new String[list.size()]);
        final List<String> list = new ArrayList<String>();

        //  dataModels.add(new DataModel("Apple Pie", "Android 1.0"));

        for (int i = 0; i < ficheros.length; i++) {

            dataModels.add(new DataModel(ficheros[i], fecha[i]));
        }
        adapter= new CustomAdapter(dataModels,getApplicationContext());

        list2.setAdapter(adapter);


}

    List<String> list = new ArrayList<String>();


    public void listarFicherosPorCarpeta(final File carpeta) {



        for (final File ficheroEntrada: carpeta.listFiles()) {

            if (ficheroEntrada.isDirectory()) {

                listarFicherosPorCarpeta(ficheroEntrada);


            } else {
                System.out.println(ficheroEntrada.getName());

                list.add(ficheroEntrada.getName());


            }


        }

    }

CustomAdapter.java

public class CustomAdapter extends ArrayAdapter<DataModel> {

    private ArrayList<DataModel> dataSet;
    Context mContext;

    // View lookup cache
    private static class ViewHolder {
        TextView txtTitle;
        TextView txtFecha;
    }

    public CustomAdapter(ArrayList<DataModel> data, Context context) {
        super(context, R.layout.rowlayout, data);
        this.dataSet = data;
        this.mContext=context;

    }


    private int lastPosition = -1;

    private String convertStringArrayToString(String[] stringArray) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < stringArray.length; i++) {
            String item = stringArray[i];
            sb.append(item).append("\n");
        }

        String result = sb.toString();
        if (result.endsWith("\n")) {
            result = result.substring(0, result.length() - 1);
        }

        return result;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Get the data item for this position
        DataModel dataModel = getItem(position);
        // Check if an existing view is being reused, otherwise inflate the view
        ViewHolder viewHolder; // view lookup cache stored in tag

        final View result;

        if (convertView == null) {

            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.rowlayout, parent, false);
            viewHolder.txtTitle = (TextView) convertView.findViewById(R.id.listtext);
            viewHolder.txtFecha = (TextView) convertView.findViewById(R.id.fechatxt);

            result=convertView;

            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
            result=convertView;
        }

        Animation animation = AnimationUtils.loadAnimation(mContext, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top);
        result.startAnimation(animation);
        lastPosition = position;
        viewHolder.txtTitle.setTextColor(Color.parseColor("#015D99"));
        viewHolder.txtTitle.setHeight(125);


        viewHolder.txtTitle.setText(dataModel.getFicheros());
        viewHolder.txtFecha.setText(dataModel.getFecha());

        // Return the completed view to render on screen
        return convertView;
    }
}

DataModel.java

public class DataModel {

    String ficheros;
    String fecha;

    public DataModel(String ficheros, String fecha) {
        this.ficheros = ficheros;
        this.fecha = fecha;


    }

    public String getFicheros() {
        return ficheros;
    }

    public String getFecha() {
        return fecha;
    }

}

ошибка: незарегистрированное исключение ParseException;должен быть перехвачен или объявлен как выброшенный

org.gradle.api.internal.tasks.compile.CompilationFailedException: Компиляция не удалась;см. вывод ошибки компилятора для деталей. at> org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors (NormalizingJavaCompiler.java:104)

1 Ответ

3 голосов
/ 08 октября 2019

Вы можете sort ваш arraylist, прежде чем передать его на adapter. как следующее.

// ...... your other codes
 for (int i = 0; i < ficheros.length; i++) {
  dataModels.add(new DataModel(ficheros[i], fecha[i]));
}

// here you can sort your list like the following
Collections.sort(dataModels, new Comparator<DataModel>(){
    public int compare(DataModel lhs, DataModel rhs){
      return lhs.getFicheros().compareTo(rhs.getFicheros());
    }
});

adapter= new CustomAdapter(dataModels,getApplicationContext());

list2.setAdapter(adapter);

И еще одна вещь, которую вы должны добавить свой listview к вашему rootView.

Обновление

Чтобы отсортировать список по дате, вы можете сделать следующее.

try {
   // you can sort your list  by date like the following
  Collections.sort(dataModels, new Comparator<DataModel>(){
      SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");

      public int compare(DataModel lhs, DataModel rhs){
        try{
           return dateFormat.parse(lhs.getFecha()).compareTo(dateFormat.parse(rhs.getFecha()));
        }catch (Exception e) {
            // handle your exception here.
            Log.e("TAG", "Exception : "+e.toString());
            return 0;
        }
      }
  });
}
...