ChechBox im ListView abfragen

C

ChrisFand

Neues Mitglied
0
Hallo an alle, ich hab folgendes Problem:
Habe eine MainActivity in welcher eine ListView liegt, diese bekommt ihre list Items von der mitarbeiter_list row.xml.
In der besagten mitarbeiter_list_row.xml ist eine Checkbox. Jetzt würde ich gerne den Status der Checkboxen und mir Ihren Text ausgeben lassen abfangen, das habe ich in der Main versucht aber das geht einfach nicht.Sobald der Code drin ist um den CheckedChange abzufragen geht die app nicht mehr. Ich hoffe Ihr mir evtl mal ein bisschen auf die Sprünge helfen, Verzweifelung pur!

MainActivity.java
Code:
public class MainActivity extends Activity {
	
	ListView listView;
	File mitarbeiterCSV;
	ArrayList<String> mitarbeiterList;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.activity_main);
		
		File dir = Environment.getExternalStorageDirectory();	
		mitarbeiterCSV=new File(dir, "download/Mitarbeiter.csv");
		mitarbeiterList=new ArrayList<String>();
		loadStart();
						
		listView=(ListView) findViewById(R.id.listView);		
		ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.list_mitarbeiter_row, R.id.checkbox,mitarbeiterList);
		listView.setAdapter(adapter);
		CheckBox cb=(CheckBox) findViewById(R.id.checkbox);
        cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
 
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked){
                    Toast.makeText(getApplicationContext(), "Checked", Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(getApplicationContext(), "Not Checked", Toast.LENGTH_SHORT).show();
                }
            }
        });
	}	
	      
	public void loadStart(){
		FileInputStream fileIn;
		try
		{
			fileIn=new FileInputStream(mitarbeiterCSV);
			loadData(fileIn);
		}
		catch (FileNotFoundException e)
		{
			Toast.makeText(getApplicationContext(),"Mitarbeiter Stammdaten nicht vorhanden", Toast.LENGTH_LONG).show();
		}
	}
	
	public void loadData(FileInputStream fileIn) {
		BufferedReader reader=new BufferedReader(new InputStreamReader(fileIn));
		String line;
		try
		{
			while((line=reader.readLine()) != null){
				mitarbeiterList.add(line);
			}
		}
		catch (IOException e)
		{
			Toast.makeText(getApplicationContext(),"Fehler beim laden der Daten.", Toast.LENGTH_LONG).show();
		}
	}
	
	//**Click Event Button "Weiter"**/
	public void next(View view) {
		Intent nextScreen=new Intent(getApplicationContext(), ProjektActivity.class);
		startActivity(nextScreen);		 
	}
}

activity_main.xml
HTML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:gravity="fill_vertical"
    android:orientation="vertical"
    tools:context="${packageName}.${activityClass}" >

    <LinearLayout
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" >

        <Button
            android:id="@+id/Mitarbeiter"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/Mitarbeiter" />

        <Button
            android:id="@+id/btWeiter"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_weight="1"
            android:onClick="next"
            android:text="@string/Weiter" />
    </LinearLayout>

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="448dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true" >

    </ListView>
</LinearLayout>

mitarbeiter_list_row.xml
HTML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" 
    android:gravity="left">

    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:text="" />
</LinearLayout>
 
Ich bin nicht sicher ob das was du dort gepostet hast funktionieren kann.

Ich würde mir einen eigenen Array-Adapter schreiben.
Diesem übergibst du dann ein Callback, welches er beim "createView" dem jeweiligen View übergibt.

in dieser Funktion übergibst du dann dem jeweiligen "onChangedListener" dein Callback.

hier ein ähnliches Beispiel:
ListView with checkboxes
 
Also es läuft soweit das ich die Daten aus der csv Datei anzeigen kann und die CheckBoxen "Checken" kann. Ich werde das mal so aufbauen wie es in deinem Link steht. Danke
 
Hier mal ein kleines Beispiel (aus dem Kopf heraus):

Code:
public CheckboxListActivity extends Activity implements CheckboxListAdapter[COLOR=#000000][B].[/B][/COLOR]CheckboxCallback{
//[...

@Override
protected void onCreate(....){
     listView = (ListView) findViewById(...);
     listView.setAdapter(new CheckboxArrayAdapter(this));
}


@Override
public void checkboxClicked(CompoundButton buttonView, boolean isChecked){
 // stuff with checkbox
}

//..]
}
[COLOR=#000000][B]public[/B][/COLOR] [COLOR=#000000][B]class[/B][/COLOR] CheckboxListAdapter [COLOR=#000000][B]extends[/B][/COLOR] ArrayAdapter<String>{
public interface CheckboxCallback{
    public void checkboxClicked(CompoundButton buttonView, boolean isChecked);
}

private CheckboxCallback callback
  public CheckboxListAdapter(Context context, 
CheckboxCallback callback){
   //...
}

@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
  if (convertView == null) {
  //neuen View anlegen mit eigenem Layout
  }
  
//checkbox hohlen
  ((CheckBox)convertView.getViewById(..)).setOnChangeListener(new ...{
      @Override
     public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) {
    callback.checkboxClicked(buttonView, isChecked);            
      }
  }
  
}




}


vielleicht hilft dir das Weiter, ich hab das nur mal geschrieben um zu verdeutlichen was ich meine
 
Ok, ich hab das mal so umgesetzt jedoch bekomme schmeißt der mich sofort wieder aus der App raus... "Kopfkratz".
 
Versuchs mal auf diese Weise:

Code:
ArrayAdapter<String> adp = new ArrayAdapter<String>(.....){
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                
                if(convertView == null){
                    convertView = View.inflate(getApplicationContext(), R.layout.list_mitarbeiter_row, null);
                }
                
                // Hier dein View mit dem krämpel befüllen den du brauchst
                
                Checkbox cb = convertView.findViewById(R.id.checkbox);
                
                
                CheckBox cb=(CheckBox) findViewById(R.id.checkbox);
                cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
         
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        if(isChecked){
                            Toast.makeText(getApplicationContext(), "Checked", Toast.LENGTH_SHORT).show();
                        }else{
                            Toast.makeText(getApplicationContext(), "Not Checked", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
                
                
                return super.getView(position, convertView, parent);
            }
        };
 
Also so funktioniert das absolut super, vielen Dank für deine Hilfe.
:thumbsup:
 

Ähnliche Themen

A
Antworten
10
Aufrufe
1.021
swa00
swa00
D
  • djsnoopy
Antworten
6
Aufrufe
617
djsnoopy
D
B
Antworten
3
Aufrufe
1.308
swa00
swa00
Zurück
Oben Unten