vista de lista personalizada utilizando la clase arrayadapter en android

cómo seleccionar el artículo de la fila usando Tick mark como iphone en android? iam usando imageview en list_row.xml.when hago clic en el ítem de la fila de la lista y luego muestro la imagen en la fila imageview.

if(getItem(position)!=null){ img.setvisibilty(View.Visible);} else{System.out.println("imagenull");} 

iam usando esta imagen, pero solo en la última fila. Por favor, ayúdenme a seleccionar el artículo usando la marca tickmark.

 public class DistanceArrayAdapter extends ArrayAdapter{ public static String category,state,miles; public ImageView img; private Context context; private int current = -1; ArrayList dataObject; public DistanceArrayAdapter(Context context, int textViewResourceId, ArrayList dataObject) { super(context, textViewResourceId, dataObject); this.context=context; } @Override public View getView(final int position, View convertView, ViewGroup parent) { View rowView=convertView; if(rowView==null){ LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); rowView = inflater.inflate(R.layout.category_row, parent, false); } //TextView textView = (TextView) rowView.findViewById(R.id.text1); TextView textView1 = (TextView) rowView.findViewById(R.id.text2); //textView.setText(""+getItem(position).id); textView1.setText(""+getItem(position).caption); img=(ImageView)rowView.findViewById(R.id.img); img.setVisibility(View.GONE); if(position%2==1) { rowView.setBackgroundResource(R.color.even_list); } else { rowView.setBackgroundResource(R.color.odd_list); } 

rowView.setOnClickListener (new OnClickListener () {

  @Override public void onClick(View v) { if(img.getVisibility()==View.GONE) { img.setVisibility(View.VISIBLE); System.out.println("1"); } if(img.getVisibility()==View.VISIBLE){ img.setVisibility(View.GONE); System.out.println("12"); } miles=getItem(position).caption; System.out.println("miles"+miles); } }); return rowView; } } 

Dibujando desde https://groups.google.com/forum/?fromgroups#!topic/android-developers/No0LrgJ6q2M

 public class MainActivity extends Activity implements AdapterView.OnItemClickListener { String[] GENRES = new String[] {"Action", "Adventure", "Animation", "Children", "Comedy", "Documentary", "Dtwig", "Foreign", "History", "Independent", "Romance", "Sci-Fi", "Television", "Thriller"}; private CheckBoxAdapter mCheckBoxAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ListView listView = (ListView) findViewById(R.id.lv); listView.setItemsCanFocus(false); listView.setTextFilterEnabled(true); listView.setOnItemClickListener(this); mCheckBoxAdapter = new CheckBoxAdapter(this, GENRES); listView.setAdapter(mCheckBoxAdapter); Button b = (Button) findViewById(R.id.button1); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub StringBuilder result = new StringBuilder(); for (int i = 0; i < GENRES.length; i++) { if (mCheckBoxAdapter.mCheckStates.get(i) == true) { result.append(GENRES[i]); result.append("\n"); } } Toast.makeText(MainActivity.this, result, 1000).show(); } }); } public void onItemClick(AdapterView parent, View view, int position, long id) { mCheckBoxAdapter.toggle(position); } class CheckBoxAdapter extends ArrayAdapter implements CompoundButton.OnCheckedChangeListener { LayoutInflater mInflater; TextView tv1, tv; CheckBox cb; String[] gen; private SparseBooleanArray mCheckStates; private SparseBooleanArray mCheckStates; CheckBoxAdapter(MainActivity context, String[] genres) { super(context, 0, genres); mCheckStates = new SparseBooleanArray(genres.length); mInflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); gen = genres; } @Override public int getCount() { // TODO Auto-generated method stub return gen.length; } } } 

activity_main.xml

      

Y el archivo XML para las casillas de verificación:

 < ?xml version="1.0" encoding="utf-8"?>     

Cuando hace clic en el botón, aparece un mensaje de brindis con la lista de elementos seleccionados. Puede modificar lo anterior según sus requisitos.

enter image description here

Establecer el modo de selección en su ListView

  //if using ListActivity or ListFragment getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); //or myListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); //myListView is reference to your ListView 

He creado un ejemplo de muestra para la lista con casillas de verificación, usando el adaptador de matriz.

ListView con CheckBox usando ArrayAdatpter en Android

Puede encontrar código de muestra también.

Esto saldrá

enter image description here

Aquí está el fragmento de código de cómo lo estoy haciendo

Tengo una actividad que tiene vista de lista

 public class MainActivity extends Activity { private ListView mainListView = null; private Planet[] planets = null; private ArrayAdapter listAdapter = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mainListView = (ListView) findViewById(R.id.mainListView); // When item is tapped, toggle checked properties of CheckBox and // Planet. mainListView .setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView< ?> parent, View item, int position, long id) { Planet planet = listAdapter.getItem(position); planet.toggleChecked(); PlanetViewHolder viewHolder = (PlanetViewHolder) item .getTag(); viewHolder.getCheckBox().setChecked(planet.isChecked()); } }); // Create and populate planets. planets = (Planet[]) getLastNonConfigurationInstance(); if (planets == null) { planets = new Planet[] { new Planet("Mercury"), new Planet("Venus"), new Planet("Earth"), new Planet("Mars"), new Planet("Jupiter"), new Planet("Saturn"), new Planet("Uranus"), new Planet("Neptune"), new Planet("Ceres"), new Planet("Pluto"), new Planet("Haumea"), new Planet("Makemake"), new Planet("Eris") }; } ArrayList planetList = new ArrayList(); planetList.addAll(Arrays.asList(planets)); // Set our custom array adapter as the ListView's adapter. listAdapter = new PlanetArrayAdapter(this, planetList); mainListView.setAdapter(listAdapter); } public Object onRetainNonConfigurationInstance() { return planets; } } 

Y aquí está el Custom Array Adapter donde estoy manejando cosas de Checkbox

 public class PlanetArrayAdapter extends ArrayAdapter { private LayoutInflater inflater; public PlanetArrayAdapter(Context context, List planetList) { super(context, R.layout.simplerow, R.id.rowTextView, planetList); //Cache the LayoutInflate to avoid asking for a new one each time. inflater = LayoutInflater.from(context); } @Override public View getView(int position, View convertView, ViewGroup parent){ Planet planet = (Planet) this.getItem(position); CheckBox checkBox; TextView textView; // Create a new row view if (convertView == null) { convertView = inflater.inflate(R.layout.simplerow, null); textView = (TextView) convertView.findViewById(R.id.rowTextView); checkBox = (CheckBox) convertView.findViewById(R.id.CheckBox01); convertView.setTag(new PlanetViewHolder(textView, checkBox)); // If CheckBox is toggled, update the planet it is tagged with. checkBox.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { CheckBox cb = (CheckBox) v; Planet planet = (Planet) cb.getTag(); planet.setChecked(cb.isChecked()); } }); } // Re-use existing row view else { PlanetViewHolder viewHolder = (PlanetViewHolder) convertView .getTag(); checkBox = viewHolder.getCheckBox(); textView = viewHolder.getTextView(); } checkBox.setTag(planet); // Display planet data checkBox.setChecked(planet.isChecked()); textView.setText(planet.getName()); return convertView; } } 

¡Por favor! avísame si tienes algún problema con esto.

1. Haz que la visibilidad se te pase marca imagen

2. Implementar view.setOnClickListener en arrayadapter .

3. En ese control, image.getVisibility()==View.GONE luego haz image.setVisibity(View.Visible)

4.if image.getVisiblity()==View.VISIBLE luego image.setVisibity(View.GONE) tu image.setVisibity(View.GONE)

Prueba esto.