Android 新的arraylist项覆盖以前的listview项

Android 新的arraylist项覆盖以前的listview项,android,listview,android-intent,arraylist,android-arrayadapter,Android,Listview,Android Intent,Arraylist,Android Arrayadapter,目前,我正在尝试将用户输入的意图数据发送到自定义适配器上显示。来自detailspage.java类的用户输入的意图数据将通过自定义Arrayadapter发送到listview页面。但是,每次我添加一个新项目时,它都会覆盖我以前的条目。希望一些善良的灵魂能帮助一些新加入android的人 下面是我的代码片段 // Set a click listener on that button btnAddData.setOnClickListener(new View.OnClickL

目前,我正在尝试将用户输入的意图数据发送到自定义适配器上显示。来自detailspage.java类的用户输入的意图数据将通过自定义Arrayadapter发送到listview页面。但是,每次我添加一个新项目时,它都会覆盖我以前的条目。希望一些善良的灵魂能帮助一些新加入android的人

下面是我的代码片段

    // 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();
}
}
公共类WorkoutSetActivity扩展了AppCompative活动{
ArrayList训练=新建ArrayList();
/**ListView的适配器*/
训练设置适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.exercise_列表);
适配器=新的训练设置适配器(此,训练);
ListView ListView=(ListView)findViewById(R.id.list);
setAdapter(适配器);
Intent=this.getIntent();
字符串名称=intent.getExtras().getString(“名称”);
String set=intent.getExtras().getString(“set”);
String rep=intent.getExtras().getString(“rep”);
添加(新的WorkoutSet(名称、集合、代表));
Toast.makeText(WorkoutSetActivity.this,“添加训练”,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;
}
}
公共类WorkoutSetAdapter扩展了ArrayAdapter{
公共训练集适配器(活动上下文、ArrayList训练){
超级(上下文,0,训练);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//检查现有视图是否正在重新使用,否则会膨胀视图
View listItemView=convertView;
如果(listItemView==null){
listItemView=LayoutFlater.from(getContext()).inflate(
R.layout.activity\u workout\u set,父项,false);
}
WorkoutSet currentWorkout=getItem(位置);
//在列表项布局中查找要修改的各个视图
TextView name TextView=(TextView)listItemView.findViewById(R.id.workout\u name);
TextView setTextView=(TextView)listItemView.findViewById(R.id.workout\u set);
TextView repTextView=(TextView)listItemView.findViewById(R.id.workout\u rep);
nameTextView.setText(currentWorkout.getName());
setTextView.setText(“set:+currentWorkout.getSet());
repTextView.setText(“Reps:+currentWorkout.getRep());
返回listItemView;
}
}
每次我添加新项目时,它都会覆盖我以前的条目

没有“以前的条目”
startActivity
每次加载一个空适配器,并且只添加一个元素

您需要的是一个(或任何持久存储层,但提供的SQLite没有更多的库)



从好的方面来看,您的意图和适配器代码看起来不错

每次调用
startActivity()
,都会打开一个新的
WorkoutSetActivity
,它是一个新的WorkoutSetActivity对象实例,因此arrayAdapter也是一个新实例,它只会显示您这次发送的数据


如果要显示所有数据,必须将以前的数据保存到数据库或文件中。在WorkoutSetActivity onCreate(),您应该获取以前的数据,将它们和当前数据放入适配器。

您应该使用一些持久数据存储…嘿,谢谢您稍后的反馈。一周来我一直在尝试实现数据库,但遇到了一些问题。如果你有时间,一定要看一看。非常感谢您的帮助:)