Ich habe Probleme, die gesamte Zeichenfolge richtig in meine Arraylist zu bekommen. Ich gehe davon aus, dass der Fehler etwas mit meinem benutzerdefinierten Textwatcher zu tun hat oder wie ich die Array-Liste durchlaufen habe. Hier ist mein Code:Eine String ArrayList in die SQLite-Datenbank schreiben
case R.id.action_add:
Workout workout = new Workout("", "", "", "");
workoutList.add(workout);
ListView exerciseList = (ListView) findViewById(R.id.exerciseListView);
CustomAdapter myAdapter = new CustomAdapter(this, R.layout.custom_list, workoutList);
exerciseList.setAdapter(myAdapter);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public class CustomAdapter extends ArrayAdapter<Workout> {
private int layoutResource;
public CustomAdapter(Context context, int layoutResource, List<Workout> workoutList) {
super(context, layoutResource, workoutList);
this.layoutResource = layoutResource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
view = layoutInflater.inflate(layoutResource, null);
}
Workout workout = getItem(position);
if (workout != null) {
final EditText exercise = (EditText) view.findViewById(R.id.exercise);
final EditText reps = (EditText) view.findViewById(R.id.reps);
final EditText sets = (EditText) view.findViewById(R.id.sets);
if (exercise != null){
exercise.addTextChangedListener(new CustomWatcher(exercise));
}
if (reps != null) {
reps.addTextChangedListener(new CustomWatcher(reps));
}
if (sets != null) {
sets.addTextChangedListener(new CustomWatcher(sets));
}
}
return view;
}
}
//Textwatcher class
class CustomWatcher implements TextWatcher {
private View view;
public CustomWatcher(View view) {
this.view = view;
}
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
public void afterTextChanged(Editable editable) {
String text = editable.toString();
switch (view.getId()) {
//exercises
case R.id.exercise:
exercises.add(text);
break;
//reps
case R.id.reps:
reps.add(text);
break;
//sets
case R.id.sets:
sets.add(text);
break;
}
}
}
}
Die Fälle sind Tasten. Wenn ich auf die Schaltfläche "Hinzufügen" klicke, versuche ich, meine benutzerdefinierte Listenansicht zu meiner Seite hinzuzufügen, die drei Textansichten enthält. Wenn ich dann auf "Speichern" klicke, versuche ich, die Daten von jeder Textposition in eine Array-Liste zu speichern, um sie in meiner Datenbank zu speichern.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection for menu
switch (item.getItemId()) {
case R.id.action_save:
String title = MyWorkoutsActivity.workouts.get(workoutID);
String ex;
String rp;
String st;
SQLDatabase db = new SQLDatabase(this);
for(int i = 0; i < workoutList.size(); i++){
//exercises, reps, and sets always same number so only one for loop needed
ex = exercises.get(i);
rp = reps.get(i);
st = sets.get(i);
db.addExercise(new Workout(title, ex, rp, st));
}
List<Workout> workouts = db.getAllExercises();
for (Workout wo : workouts) {
String log = "Workout " + wo.getWorkout() + "Exercise " + wo.getExercise() + " ,Reps " + wo.getReps() + " ,Sets " + wo.getSets();
// Writing workouts to log
Log.d("Workout ", log);
}
Intent intent = new Intent(this, MyWorkoutsActivity.class);
startActivity(intent);
return true;
Vielen Dank! Das einzige Problem dabei ist, wie würde ich auf jede Listenansichtszeile separat Bezug nehmen, um die Bearbeitungstextdaten hinzuzufügen? Es ist keine festgelegte Anzahl von Zeilen, es gibt so viele Zeilen wie die Anzahl der Male, die der Benutzer gedrückt hat, add new. – Achall9
Ich denke, dieses Tutorial wird helfen: http://www.tutorialspoint.com/android/android_list_view.htm Dies wird den Trick für Sie tun, wenn Sie die Liste nicht dynamisch ändern möchten (die Schaltfläche Speichern ist in einer anderen Aktivität als die Listenansicht) – Omar