Die ausgewählten Elemente aus listview mit checkbox in android
Habe ich eine listview mit Checkboxen und Suchfunktionen. Die Suche funktioniert gut, die Checkboxen sind auch zeigen. Jetzt, was ich will, ist, ich will die Namen alle überprüften Elemente der Liste onclick einer Schaltfläche. Ich möchte auch wissen, wie wird es möglich sein zu zeigen, eine weitere textview, sagen, Preis unten Einzelteil-name.
Den main layout:
<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>
Den simplerow.xml Datei:
<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>
Den Aktivität:
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;
}
}
Was muss ich tun, um das gewünschte Ergebnis zu erhalten?
groups.google.com/forum/?fromgroups#!Thema/android-Entwickler/.... überprüfen Sie die Lösung von Romain Guy. Beispiel @ stackoverflow.com/questions/17168814/.... ändern Sie entsprechend Ihre Bedürfnisse yo
Sie können die Speicherung der Elemente geklickt wird in eine ArrayList oder so von der innerhalb
Bitte schlagen Sie mich einige änderungen in meinen code, ich bin ein wenig verwirrt!
warum nicht überprüfen Sie die links gepostet hat funktionierenden code
die Art und Weise habe ich aufgefüllt, die listview und implementiert die Suche-Funktion ist nicht verfügbar in der gegebenen link. Sie haben aufgefüllt der Liste zu ändern, hat aber keine Suchfunktion.
Sie können die Speicherung der Elemente geklickt wird in eine ArrayList oder so von der innerhalb
setOnItemClickListener
und dann auf die klicken Sie auf die Schaltfläche, die Sie sollten, haben Sie die Liste fertig.Bitte schlagen Sie mich einige änderungen in meinen code, ich bin ein wenig verwirrt!
warum nicht überprüfen Sie die links gepostet hat funktionierenden code
die Art und Weise habe ich aufgefüllt, die listview und implementiert die Suche-Funktion ist nicht verfügbar in der gegebenen link. Sie haben aufgefüllt der Liste zu ändern, hat aber keine Suchfunktion.
InformationsquelleAutor kittu88 | 2013-08-02
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie halten Staaten von checboxes in Ihre eigene adapter, die mit ArrayList oder SparseArray. Dann, wenn Sie wollen, bekommen Namen alle Elemente, die Sie gerade Durchlaufen das array und lese Namen, wo geprüft parameter true ist. Natürlich sollte die Liste aktualisiert werden, wenn der Zustand einer checkbox ändert.
Dass die einzig richtige Lösung, da nur wenige ListView-Elemente sind sichtbar auf dem Bildschirm, so zu Lesen versucht, Ihre Eigenschaften on the fly unzuverlässig ist - jeden moment Element kann recycelt werden somit nicht zugänglich.
stackoverflow.com/questions/12647001/... - hier ist einige benutzerdefinierte adapter mit ListView mit Checkboxen.
InformationsquelleAutor Malachiasz
Warum gehst du nicht Durchlaufen
itemss
array und Holen Sie sich die Elemente, die Ihrechecked
Feld isttrue
?Aktualisieren Sie Ihre
simplerow.xml
(hinzufügen der PreisTextView
) und auch IhreSelectViewHolder
undSelectArralAdapter
.Diese sollte nicht sehr schwer zu Programmieren denke ich.
InformationsquelleAutor Devrim