How do I put my list in alphabetical order?

1

I have ListView and would like to put it in alphabetical order by the names of the clients. I urge you to be as specific as possible because I do not have much experience.

  import static android.R.id.list;
  import android.app.Activity;
  import android.content.Intent;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.AdapterView;
  import android.widget.ListView;
  import br.gestaoBd.BancoDeDados.ClienteDao;
  import br.gestaoBd.Beans.Cliente;
  import br.gestaoBd.listaadapters.ClienteAdapter;
  import java.util.ArrayList;
  import java.util.Collections;


  public class ListClientes extends Activity implements AdapterView.OnItemLongClickListener, AdapterView.OnItemClickListener {

ListView lista;
ArrayList<Cliente> clientes;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_clientes);

    lista = (ListView) findViewById(R.id.listview);

    lista.setOnItemLongClickListener(this);
    lista.setOnItemClickListener(this);


    atualizar(null);
}

public void atualizar(View view) {
    ClienteDao cliDao = new ClienteDao();

    clientes = cliDao.getListagem();
    lista.setAdapter(new ClienteAdapter(getBaseContext(), clientes));

}

public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
    Intent cadClienteIntent = new Intent(this, CadCliente.class);
    cadClienteIntent.putExtra("Cliente", clientes.get(position));
    startActivity(cadClienteIntent);
    return true;
}

public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Intent cadPedidoIntent = new Intent(this, CadPedido.class);
    cadPedidoIntent.putExtra("Cliente", clientes.get(position));
    startActivity(cadPedidoIntent);

}

}

My Client adapter:

  import android.content.Context;
  import android.util.Log;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.BaseAdapter;
  import android.widget.ImageView;
  import android.widget.TextView;
  import br.gestaoBd.Beans.Cliente;
  import br.gestaoBd.Mask;
  import br.gestaoBd.R;
  import java.util.List;

  public class ClienteAdapter extends BaseAdapter {  

private Context context;
private List<Cliente> clientes;

public ClienteAdapter(Context context, List<Cliente> clientes) {
    this.context = context;
    this.clientes = clientes;
}

public int getCount() {
    return clientes.size();
}

public Object getItem(int position) {
    return clientes.get(position);
}

public long getItemId(int position) {
    return clientes.get(position).getId();
}  


public View getView(int position, View convertView, ViewGroup parent) {
    Cliente cliente = clientes.get(position);

    LayoutInflater layout = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View view = layout.inflate(R.layout.linhacli, null);

    Log.i("AULA", "Montou:" + cliente.getNome());
    Log.e("ERRO", "Valor da variavel estava nullo!");

    ImageView imgImageView = (ImageView) view.findViewById(R.id.imageView1);
    imgImageView.setImageResource(R.drawable.sem_foto);

    TextView edNome = (TextView) view.findViewById(R.id.textView1);
    edNome.setText(cliente.getNome());

    TextView lblTelefone = (TextView) view.findViewById(R.id.textView2);
    lblTelefone.setText(cliente.getTelefone());


    return view;
}
}

My list

 import static android.R.id.list;
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.ListView;
 import br.gestaoBd.BancoDeDados.ClienteDao;
 import br.gestaoBd.Beans.Cliente;
 import br.gestaoBd.listaadapters.ClienteAdapter;
 import java.util.ArrayList;
 import java.util.Collections;


 public class ListClientes extends Activity implements AdapterView.OnItemLongClickListener, AdapterView.OnItemClickListener {

ListView lista;
ArrayList<Cliente> clientes;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_clientes);

    lista = (ListView) findViewById(R.id.listview);

    lista.setOnItemLongClickListener(this);
    lista.setOnItemClickListener(this);


    atualizar(null);
}

public void atualizar(View view) {
    ClienteDao cliDao = new ClienteDao();

    clientes = cliDao.getListagem();
    lista.setAdapter(new ClienteAdapter(getBaseContext(), clientes));

}

public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
    Intent cadClienteIntent = new Intent(this, CadCliente.class);
    cadClienteIntent.putExtra("Cliente", clientes.get(position));
    startActivity(cadClienteIntent);
    return true;
}

public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Intent cadPedidoIntent = new Intent(this, CadPedido.class);
    cadPedidoIntent.putExtra("Cliente", clientes.get(position));
    startActivity(cadPedidoIntent);


}

}
    
asked by anonymous 05.01.2016 / 19:35

1 answer

5

To sort the list we will use the method sort of class Collections .

This method calls for two parameters:

  • The list that will be sorted.

  • The interface Comparator , which will have the sort logic.

  • To implement this interface, we have to inform the type of object that we are going to work, in this case the Cliente .

    new Comparator<Cliente>()
    

    This object must be of the same type as that entered in the List.

    To compare String , we use the compareTo method.

    This is because String implements Comparable .

    To compare int , we follow the following logic:

    If the first integer is less than the second, we return -1 (or any negative).

    If the first integer is greater than the second, we return 1 (or any positive).

    If they are equal, then we return 0.

    Your code should look like this:

     clientes = cliDao.getListagem();
        Collections.sort(clientes, new Comparator<Cliente>() {
                @Override
                public int compare(Cliente o1, Cliente o2) {
                    return o1.getNome()).compareTo(o2.getNome());
                }
    
            });
    
     lista.setAdapter(new ClienteAdapter(getBaseContext(), clientes));
    

    If you want to sort in several parts of your code this list, we can directly implement the interface Comparable in Cliente .

    So it will not be necessary to repeat Comparator

    It would look something like this:

    Client class:

    public class Cliente implements Comparable<Cliente>{
    
    public int compareTo(Cliente outroCliente) {
          return o1.getNome()).compareTo(o2.getNome());
      }
    }
    

    Your list:

     clientes = cliDao.getListagem();
     Collections.sort(clientes);
     lista.setAdapter(new ClienteAdapter(getBaseContext(), clientes));
    

    Another way would be to get your getList () method of DAO already return sorted through ORDER BY .

    Any questions, we are available!

        
    05.01.2016 / 20:22