He creado un listview con casillas de verificación y la funcionalidad de búsqueda. La búsqueda está trabajando bien, las casillas de verificación están mostrando también. Ahora lo que quiero es que quiero obtener los nombres de todos comprobado los elementos de la lista onclick de un botón. También quiero saber cómo va a ser posible mostrar otra textview, decir precio por debajo de nombre de elemento.

La principal de diseño:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <!-- Editext for Search -->

    <EditText
        android:id="@+id/inputSearch"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Search products.."
        android:inputType="textVisiblePassword" />

    <ListView
        android:id="@+id/mainListView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >
    </ListView>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="5dp"
        android:onClick="showResult"
        android:text="Show Result" >
    </Button>

</LinearLayout>

La simplerow.xml de archivo:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

  <TextView android:id="@+id/rowTextView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textStyle="bold"
    android:textSize="16sp" >
  </TextView>

  <CheckBox android:id="@+id/CheckBox01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="10dp"
    android:layout_alignParentRight="true" android:layout_marginRight="6sp"
    android:focusable="false">
  </CheckBox>

</RelativeLayout>

La actividad:

public class MultiSelectList extends Activity {
//Search EditText
EditText inputSearch;
private ListView mainListView;
private mItems[] itemss;
private ArrayAdapter<mItems> listAdapter;
ArrayList<String> checked = new ArrayList<String>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Find the ListView resource.
mainListView = (ListView) findViewById(R.id.mainListView);
inputSearch = (EditText) findViewById(R.id.inputSearch);
//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) {
mItems planet = listAdapter.getItem(position);
planet.toggleChecked();
SelectViewHolder viewHolder = (SelectViewHolder) item
.getTag();
viewHolder.getCheckBox().setChecked(planet.isChecked());
}
});
//Create and populate planets.
itemss = (mItems[]) getLastNonConfigurationInstance();
ArrayList<mItems> planetList = new ArrayList<mItems>();
planetList.add(new mItems("DJ- Android"));
planetList.add(new mItems("Android"));
planetList.add(new mItems("iPhone"));
planetList.add(new mItems("BlackBerry"));
planetList.add(new mItems("Java"));
planetList.add(new mItems("PHP"));
planetList.add(new mItems(".Net"));
planetList.add(new mItems("Jhoomla"));
//Set our custom array adapter as the ListView's adapter.
listAdapter = new SelectArralAdapter(this, planetList);
mainListView.setAdapter(listAdapter);
/**
* Enabling Search Filter
* */
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
//When user changed the Text
MultiSelectList.this.listAdapter.getFilter().filter(cs);   
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
//TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
//TODO Auto-generated method stub                          
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//TODO Auto-generated method stub
menu.add(0, 1, Menu.NONE, "Products");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//TODO Auto-generated method stub
switch (item.getItemId()) {
case 1:
for (int i = 0; i < checked.size(); i++) {
Log.d("pos : ", "" + checked.get(i));
}
break;
}
return super.onOptionsItemSelected(item);
}
/** Holds planet data. */
private static class mItems {
private String name = "";
private boolean checked = false;
public mItems() {
}
public mItems(String name) {
this.name = name;
}
public mItems(String name, boolean checked) {
this.name = name;
this.checked = checked;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
public String toString() {
return name;
}
public void toggleChecked() {
checked = !checked;
}
}
/** Holds child views for one row. */
private static class SelectViewHolder {
private CheckBox checkBox;
private TextView textView;
public SelectViewHolder() {
}
public SelectViewHolder(TextView textView, CheckBox checkBox) {
this.checkBox = checkBox;
this.textView = textView;
}
public CheckBox getCheckBox() {
return checkBox;
}
public void setCheckBox(CheckBox checkBox) {
this.checkBox = checkBox;
}
public TextView getTextView() {
return textView;
}
public void setTextView(TextView textView) {
this.textView = textView;
}
}
/** Custom adapter for displaying an array of Planet objects. */
private static class SelectArralAdapter extends ArrayAdapter<mItems> {
private LayoutInflater inflater;
public SelectArralAdapter(Context context, List<mItems> 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 to display
mItems planet = (mItems) this.getItem(position);
//The child views in each row.
CheckBox checkBox;
TextView textView;
//Create a new row view
if (convertView == null) {
convertView = inflater.inflate(R.layout.simplerow, null);
//Find the child views.
textView = (TextView) convertView
.findViewById(R.id.rowTextView);
checkBox = (CheckBox) convertView.findViewById(R.id.CheckBox01);
//Optimization: Tag the row with it's child views, so we don't
//have to
//call findViewById() later when we reuse the row.
convertView.setTag(new SelectViewHolder(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;
mItems planet = (mItems) cb.getTag();
planet.setChecked(cb.isChecked());
}
});
}
//Reuse existing row view
else {
//Because we use a ViewHolder, we avoid having to call
//findViewById().
SelectViewHolder viewHolder = (SelectViewHolder) convertView
.getTag();
checkBox = viewHolder.getCheckBox();
textView = viewHolder.getTextView();
}
//Tag the CheckBox with the Planet it is displaying, so that we can
//access the planet in onClick() when the CheckBox is toggled.
checkBox.setTag(planet);
//Display planet data
checkBox.setChecked(planet.isChecked());
textView.setText(planet.getName());
return convertView;
}
}
public Object onRetainNonConfigurationInstance() {
return itemss;
}
}

¿Qué debo hacer para obtener el resultado deseado?

  • groups.google.com/forum/?fromgroups#!tema/android-desarrolladores/…. comprobar la solución por Romain Guy. ejemplo @ stackoverflow.com/questions/17168814/…. modificar según yo a tus necesidades
  • Usted puede almacenar los elementos clic en un ArrayList o algo desde dentro de setOnItemClickListener y, a continuación, al hacer clic en el botón que debe tener la lista.
  • Por favor, me sugieren algunos cambios en mi código, estoy un poco confundido!
  • ¿por qué no comprobar los enlaces publicados tiene código de trabajo
  • la forma en que me han poblado el listview y aplicado función de búsqueda, que no está disponible en el enlace. Ha llenado la lista de manera diferente, pero no tiene funciones de búsqueda.
  • ¿cuál es la dificultad para implementar la lógica para extraer los elementos de control de mantenimiento de la funcionalidad de búsqueda tal y como es. Usted tiene la funcionalidad de búsqueda, usted tiene ejemplo de cómo obtener los elementos seleccionados. lo integran.
  • la forma en la que había extraído los elementos de la lista es diferente, en realidad el arraylist que están utilizando es diferente, mi arraylist es diferente para la funcionalidad de búsqueda. Si usted amablemente ir throug tanto los códigos que usted va a entender!
  • la buena suerte puede ser que te pueden dar una mejor solución.
  • usted necesita para implementar realmente showResult si desea que el botón para hacer nada.

InformationsquelleAutor kittu88 | 2013-08-02

2 Comentarios

  1. 1

    Usted debe mantener los estados de checboxes en su adaptador personalizado, y que utiliza ArrayList o SparseArray. Entonces, cuando usted desea obtener los nombres de todos los elementos de la comprobación de que usted acaba de recorrer la matriz y leer los nombres donde comprobado parámetro es true. Por supuesto, la lista debe ser actualizada cuando la casilla de verificación de los cambios de estado.

    Que la única solución adecuada, porque sólo unos pocos elementos de ListView se visibile en la pantalla, así que tratando de leer sus propiedades sobre la marcha es inestable – en cualquier momento puede haber elementos reciclados convertido no accesible.

  2. 1

    Ahora lo que quiero es que quiero obtener los nombres de todos los de la lista activado
    elementos onclick de un botón.

    ¿Por qué no se itera sobre itemss matriz y obtener los artículos que sus checked campo es true?

    También quiero saber cómo va a ser posible mostrar otra textview,
    decir precio por debajo de nombre de elemento.

    Actualización de su simplerow.xml(añadir el precio TextView) y también su SelectViewHolder y SelectArralAdapter para que.

    Estos no deben ser muy duro para el código, supongo.

Dejar respuesta

Please enter your comment!
Please enter your name here