-1

В настоящее время я пытаюсь отправить данные о намерениях с пользовательского ввода для отображения на свой пользовательский адаптер. Данные о намерениях с пользовательского ввода из класса detailspage.java будут отправлены на страницу списка с пользовательским Arrayadapter. Однако каждый раз, когда я добавляю новый элемент, он перезаписывает мои предыдущие записи. Надейтесь, что какие-то души могут помочь кому-то новому в андроиде.Новый элемент arraylist перезаписывает предыдущий элемент списка

Ниже приведены фрагменты кода.

// Set a click listener on that button 
    btnAddData.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      saveExercise(exerciseName); 
     } 
    }); 
} 

private void saveExercise(String name) { 
    // Read from input fields 
    // Use trim to eliminate leading or trailing white space 
    String setString = mSetEditText.getText().toString().trim(); 
    String repString = mRepEditText.getText().toString().trim(); 
    String nameString = name; 


    Intent intent = new Intent(ExerciseDetailActivity.this, WorkoutSetActivity.class); 

    intent.putExtra("name", nameString); 
    intent.putExtra("set", setString); 
    intent.putExtra("rep", repString); 

    startActivity(intent); 

} 

Данные намерения будут отправлены на страницу активности, чтобы инициировать пользовательский ArrayAdapter.

public class WorkoutSetActivity extends AppCompatActivity { 

ArrayList<WorkoutSet> workout = new ArrayList<WorkoutSet>(); 

/** Adapter for the ListView */ 
WorkoutSetAdapter adapter; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.exercise_list); 

    adapter = new WorkoutSetAdapter(this, workout); 
    ListView listView = (ListView) findViewById(R.id.list); 
    listView.setAdapter(adapter); 

    Intent intent = this.getIntent(); 
    String name = intent.getExtras().getString("name"); 
    String set = intent.getExtras().getString("set"); 
    String rep = intent.getExtras().getString("rep"); 

    adapter.add(new WorkoutSet(name,set,rep)); 
    Toast.makeText(WorkoutSetActivity.this, "Workout added.", Toast.LENGTH_SHORT).show(); 
    adapter.notifyDataSetChanged(); 
} 
} 

И наконец, пользовательский код ArrayAdapter. Здесь я устанавливаю пользовательское listview.

public class WorkoutSetAdapter extends ArrayAdapter<WorkoutSet> { 


public WorkoutSetAdapter(Activity context, ArrayList<WorkoutSet> workout) { 
    super(context, 0, workout); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    // Check if the existing view is being reused, otherwise inflate the view 
    View listItemView = convertView; 
    if (listItemView == null) { 
     listItemView = LayoutInflater.from(getContext()).inflate(
       R.layout.activity_workout_set, parent, false); 
    } 

    WorkoutSet currentWorkout = getItem(position); 

    // Find individual views that we want to modify in the list item layout 
    TextView nameTextView = (TextView) listItemView.findViewById(R.id.workout_name); 
    TextView setTextView = (TextView) listItemView.findViewById(R.id.workout_set); 
    TextView repTextView = (TextView) listItemView.findViewById(R.id.workout_rep); 

    nameTextView.setText(currentWorkout.getName()); 
    setTextView.setText("Sets: "+ currentWorkout.getSet()); 
    repTextView.setText("Reps: "+ currentWorkout.getRep()); 

    return listItemView; 
} 
} 
+0

Вы должны использовать некоторое постоянное хранилище данных ... – Selvin

ответ

0

каждый раз, когда я добавить новый элемент он переписывает мои предыдущие записи

Там нет «предыдущих записей». startActivity загружает пустой адаптер каждый раз, и вы добавляете только один элемент.

Что вы хотите - это SQLite database (или любой постоянный уровень хранения, но SQLite предоставляется без дополнительных библиотек).


С положительной стороны, код вашего намерения и адаптера выглядит нормально.

+0

Привет, спасибо за отзыв. Пробовал внедрять базу данных за неделю, но у меня возникли некоторые проблемы. Если у вас есть время, взгляните. Был бы очень благодарен за помощь :) http://stackoverflow.com/questions/42329936/inserting-data-into-sqlite-and-displaying-into-listview?noredirect=1#comment71812487_42329936 –

0

Каждый раз, когда вы звоните startActivity(), вы открываете новый WorkoutSetActivity, это новый экземпляр объекта WorkoutSetActivity, поэтому arrayAdapter также является новым, он будет отображать только данные, которые вы отправить на этот раз.

Если вы хотите отобразить все данные, вы должны сохранить предыдущие данные в базу данных или файл. В WorkoutSetActivity onCreate() вы должны получить предыдущие данные, поместить их и текущие данные в адаптер.