Ich habe eine ArrayList<String>
, die ich zum Speichern von PackageInfo verwenden (ein Beispiel für ein Element in der Arraylist ist "com.skype.raider").ArrayList.Remove funktioniert nicht beim ersten Aufruf
Die arralist initialisiert wird, wie folgt:
private List<String> pkgs;
und in der Consturctor
Klassepkgs = new ArrayList<>();
Wenn ich pkgs.remove(String)
aufrufen, funktioniert es nicht, aber wenn ich versuche immer wieder und zu entfernen, es funktioniert schließlich.
Heres, wie ich testen, ob die Entfernung gearbeitet (i bearbeitet den Code, so dass es leichter liest)
private void togglePackage(String selectedPackage,CheckBox chk_app){
String m_pkg = selectedPackage.toString(); //redundant .toString()
boolean checked = !chk_app.isChecked(); //checkbox boolean toggle
if (checked && !pkgs.contains(m_pkg)) { //if not already in arraylist
pkgs.add(m_pkg); //adding the newly checked package
} else if (!checked && pkgs.contains(m_pkg)) { //if it needs to be removed
pkgs.remove(m_pkg); //<-----------------------This works around the 3rd time i press the checkbox
}
//Here i check if the string was actually removed from the arrylist
//This following code will not be in production, i just used it for testing
if (pkgs.contains(m_pkg)) {
if (checked) {
chk_app.setChecked(checked);//Success
} else {
chk_app.setChecked(!checked);//Failure
}
} else {
if (!checked) {
chk_app.setChecked(checked);//Success
} else {
chk_app.setChecked(!checked);//Failure
}
}
}
Hier ist die ungeschnittene Onclick-Ereignis ist
RelativeLayout rl_container = (RelativeLayout) child.findViewById(R.id.rl_container);
rl_container.setTag(pkg);
rl_container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String m_pkg = v.getTag().toString();
System.out.println("Pkg = "+m_pkg);
boolean checked = !chk_app.isChecked();
if (checked && !pkgs.contains(m_pkg)) {
pkgs.add(m_pkg);
System.out.println("Adding " + m_pkg);
} else if (!checked && pkgs.contains(m_pkg)) {
pkgs.remove(m_pkg);
System.out.println("Removing " + m_pkg);
}
if (pkgs.contains(m_pkg)) {
if (checked) {
System.out.println("Success");
chk_app.setChecked(checked);
} else {
System.out.println("Fail");
chk_app.setChecked(!checked);
}
} else {
if (!checked) {
System.out.println("Success");
chk_app.setChecked(checked);
} else {
System.out.println("Fail");
chk_app.setChecked(!checked);
}
}
}
});
Als Beispiel ich habe die arraylists Inhalte, die ich bekommen habe, indem ich über die Liste iterierte. sowie die Log-Ausgabe meiner Tests
Liste Inhalt:
com.sbg.mobile.phone
com.google.android.youtube
com.e8tracks
com.vlingo.midas
com.google.android.googlequicksearchbox
com.truecaller
Logcat Ausgabe von ungeschnittenem Code, wenn ich versuche, "com.sbg.mobile.phone"
12-18 10:37:25 ViewPostImeInputStage ACTION_DOWN
12-18 10:37:25 Pkg = com.sbg.mobile.phone
12-18 10:37:25 Removing com.sbg.mobile.phone
12-18 10:37:25 Fail
12-18 10:37:28 ViewPostImeInputStage ACTION_DOWN
12-18 10:37:28 Pkg = com.sbg.mobile.phone
12-18 10:37:28 Removing com.sbg.mobile.phone
12-18 10:37:28 Fail
12-18 10:37:30 ViewPostImeInputStage ACTION_DOWN
12-18 10:37:31 Pkg = com.sbg.mobile.phone
12-18 10:37:31 Removing com.sbg.mobile.phone
12-18 10:37:31 Fail
12-18 10:37:32 ViewPostImeInputStage ACTION_DOWN
12-18 10:37:32 Pkg = com.sbg.mobile.phone
12-18 10:37:32 Removing com.sbg.mobile.phone
12-18 10:37:32 Fail
12-18 10:37:33 ViewPostImeInputStage ACTION_DOWN
12-18 10:37:33 Pkg = com.sbg.mobile.phone
12-18 10:37:33 Removing com.sbg.mobile.phone
12-18 10:37:33 Success
abzuwählen PS. Das ist meine erste Frage, also sei sanft. Ich würde auch jeden Rat zu, wie man Fragen besser zu verbessern, ich habe versucht, alle erforderlichen Informationen, aber wenn Sie etwas anderes benötigen, lassen Sie es mich bitte wissen.
sind Sie sicher, dass Ihre Arraylist enthält die angegebene Zeichenfolge die ersten Male Sie versuchen, es zu entfernen? –
int position = pkgs .indexOf ("Text"); dann pkgs .remove (Position); – koutuk
verstehe nicht, warum Sie "isChecked" verwenden, um zu überprüfen, ob der String noch im arry ist ... Sie sollten nur 'pkgs.contains (...)' verwenden und nichts anderes ist wirklich wichtig. – mithrop