Rendere non selezionabile una riga in una ListView in Android
Supponiamo di avere il nostro Adapter che estende BaseAdapter.
E supponiamo di volere rendere non selezionabile una riga della nostra ListView nel caso di una determinata condizione.
Come possiamo fare?
Semplicemente facendo l'Override del metodo isEnabled.
Quindi una cosa del genere:
public class LazyAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater = null;
private int resLayout;
HashMap<String, String> cliente = new HashMap<String, String>();
public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d, int rl) {
activity = a;
data = d;
resLayout = rl;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public boolean isEnabled(int position) {
cliente = data.get(position);
return cliente.get("ATTIVATO").equals("1");
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null) {
vi = inflater.inflate(resLayout, null);
}
// DO STUFF
return vi;
}
}
Nel mio caso, tra i dati che passo all'Adapter, ne ho che si chiama ATTIVATO, ed è quello che vado a testare.
A seconda del valore, rendo selezionabile o meno la riga.
Ovviamente i dati li prendo nell'Activity o nel Fragment; ma diciamo che per il tema trattato non è molto importante.
Enjoy!
android java adapter baseadapter activity fragment listview isenabled
Commentami!