solo - Android ListView con Checkbox y todos los que se puede hacer clic
setchecked android (5)
Posible duplicado:
Android: ¿enlazar datos de una base de datos a un CheckBox en un ListView?
Quiero usar un ListView con los elementos que tienen el siguiente diseño
-------------------------
[CB] TV TV
-------------------------
CB es una casilla de verificación y TV es una vista de texto.
Ahora leí en alguna parte que no puedes tener elementos clicables en un ListView. Si tiene algunos, entonces no podrá hacer clic en ListItems. Pero si miro la aplicación GoogleMail, esto es posible. Puedo marcar varios mensajes con la casilla de verificación (y luego seleccionar una acción para ellos) o puedo hacer clic en ListItem (o desplazarme con el dpad) para acceder a otra pantalla. ¿Alguien tiene un código / ejemplo de cómo esto es posible?
El siguiente código te ayudará a:
public class DeckListAdapter extends BaseAdapter{
private LayoutInflater mInflater;
ArrayList<String> teams=new ArrayList<String>();
ArrayList<Integer> teamcolor=new ArrayList<Integer>();
public DeckListAdapter(Context context) {
// Cache the LayoutInflate to avoid asking for a new one each time.
mInflater = LayoutInflater.from(context);
teams.add("Upload");
teams.add("Download");
teams.add("Device Browser");
teams.add("FTP Browser");
teams.add("Options");
teamcolor.add(Color.WHITE);
teamcolor.add(Color.LTGRAY);
teamcolor.add(Color.WHITE);
teamcolor.add(Color.LTGRAY);
teamcolor.add(Color.WHITE);
}
public int getCount() {
return teams.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.decklist, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.deckarrow);
holder.text = (TextView) convertView.findViewById(R.id.textname);
.......here you can use holder.text.setonclicklistner(new View.onclick.
for each textview
System.out.println(holder.text.getText().toString());
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(teams.get(position));
if(position<teamcolor.size())
holder.text.setBackgroundColor(teamcolor.get(position));
holder.icon.setImageResource(R.drawable.arraocha);
return convertView;
}
class ViewHolder {
ImageView icon;
TextView text;
}
}
Espero que esto ayude.
Establezca el CheckBox
como focusable="false"
en su diseño XML. De lo contrario, robará los eventos de clic de la vista de lista.
Por supuesto, si hace esto, necesita manipular manualmente marcando CheckBox
como marcado / desmarcado si se hace clic en el elemento de la lista en lugar de en el CheckBox
, pero es probable que desee eso de todos modos.
Establezca el adaptador de vista de lista en "simple_list_item_multiple_choice"
ArrayAdapter<String> adapter;
List<String> values; // put values in this
//Put in listview
adapter = new ArrayAdapter<UserProfile>(
this,
android.R.layout.simple_list_item_multiple_choice,
values);
setListAdapter(adapter);
este código funciona en mi proyecto y puedo seleccionar el elemento de vista de lista y la casilla de verificación
<?xml version="1.0" encoding="utf-8"?>
<!-- Single List Item Design -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true" >
<TextView
android:id="@+id/label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4" />
<CheckBox
android:id="@+id/check"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:focusable="false"
android:text="" >
</CheckBox>
</LinearLayout>
holder.checkbox.setTag(row_id);
y
holder.checkbox.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
CheckBox c = (CheckBox) v;
int row_id = (Integer) v.getTag();
checkboxes.put(row_id, c.isChecked());
}
});