Listview Element löschen und hinzufügen per Checkbox

M

madgnoll

Neues Mitglied
0
Hallo zusammen,

ich möchte gerne über ein Checkboxfeld ein Element in einer Viewlist erscheinen lassen, wenn die Box gecheckt ist, falls nicht soll das Element nicht erscheinen bzw. auch entfernt werden.

Das Hinzufügen ansich funktioniert gut (ohne den Code für das Entfernen)
Wenn ich den Code für das Entfernen des Elements integriere, passiert leider nichts mehr (also kein Element wird mehr hinzugefügt, allerdings erscheint auch keine Fehlermeldung).

Weiß jemand weiter?

Vielen Dank und beste Grüße,

Madgnoll

Code:
package com.example.verviewlist;

import java.util.ArrayList;

import android.app.ListActivity;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
public class MainActivity extends ListActivity {

    ArrayList list = new ArrayList();
    ArrayAdapter adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);       
        CheckBox checkadd = (CheckBox) findViewById (R.id.checkBox1);
        adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, list);
        OnClickListener listenerst = new OnClickListener() {
            @Override
            public void onClick(View v) {    
                CheckBox checkadd = (CheckBox) findViewById (R.id.checkBox1);
                if (checkadd.isChecked()){              
                list.add("Test 1");
                adapter.notifyDataSetChanged();               
            }}
        };

        OnClickListener listenerloesch = new OnClickListener() {
           @Override
            public void onClick(View v) {
               CheckBox checkadd = (CheckBox) findViewById (R.id.checkBox1);
      if (checkadd.isChecked()==false){ 
      list.remove("Test 1");       
      adapter.notifyDataSetChanged();               
           }}
       };
    
        checkadd.setOnClickListener(listenerst);
        checkadd.setOnClickListener(listenerloesch);
        setListAdapter(adapter);
    }
}


Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >



    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:choiceMode="multipleChoice" >
    </ListView>

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="24dp"
        android:text="CheckBox" />

</RelativeLayout>
 
Hallo,

für mich sieht es auf dem ersten Blick ganz klar aus.

Code:
checkadd.setOnClickListener(listenerst);
        checkadd.setOnClickListener(listenerloesch);

Du hast zwei Listener bei einem fügst du was hinzu, beim zweiten löscht du es wieder direkt.

Mach mal zwei Logs bei den jeweiligen Listenern, dann müsstest du das sehen.

Aber die Lösung ist, dass du nur einen Listener brauchst:

Code:
OnClickListener listenerst = new OnClickListener() {
@Override
public void onClick(View v) {
CheckBox checkadd = (CheckBox) findViewById (R.id.checkBox1);
if (checkadd.isChecked()){
list.add("Test 1");
adapter.notifyDataSetChanged();
}
else{

list.remove("Test 1");
adapter.notifyDataSetChanged();

}}
};
 
Hallo,

vielen herzlichen Dank für deine Antwort!

Ich habe es direkt ausprobiert, leider bekomme ich eine timeout gemeldet.Habe überlegt, ob er jetzt pausenlos Elemente in die View lädt oder entfernt - aber des dürfte eigentlich auch nicht der Fall sein.


Code:
package com.example.verviewlist;

import java.util.ArrayList;

import android.app.ListActivity;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
public class MainActivity extends ListActivity {
    ArrayList list = new ArrayList();
    ArrayAdapter adapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);       
        CheckBox checkadd = (CheckBox) findViewById (R.id.checkBox1);
        adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, list);
   
            OnClickListener listenerst = new OnClickListener() {
                @Override
                public void onClick(View v) {
                CheckBox checkadd = (CheckBox) findViewById (R.id.checkBox1);
                if (checkadd.isChecked()){
                list.add("Test 1");
                adapter.notifyDataSetChanged();
                }
                else{

                list.remove("Test 1");
                adapter.notifyDataSetChanged();

                }}
            };        
                checkadd.setOnClickListener(listenerst);
                setListAdapter(adapter);
           
    }}
 
Hi,

ich habe deinen Code jetzt vom ersten Post in ein neues Projekt hinzugefügt, und den Code vom letzten Post auch.

Bei mir funktioniert es. (Siehe Screenshots) Könntest du deine Fehlermeldung vielleicht besser beschreiben?
device-2015-06-21-094036.png device-2015-06-21-093959.png
 
Hallo,

vielen lieben Dank, jetzt funktioniert es!
Gestern brachte er noch eine Fehlermeldung, heute geht es. Vielleicht war's gestern einfach zu spät ;-)

Beste Grüße,
Madgnoll
 

Ähnliche Themen

B
Antworten
6
Aufrufe
1.051
jogimuc
J
A
Antworten
10
Aufrufe
1.021
swa00
swa00
M
  • MikelKatzengreis
Antworten
5
Aufrufe
126
swa00
swa00
Zurück
Oben Unten