-1

目前我试图从用户输入发送意图数据显示到我的自定义适配器。来自用户输入的来自detailspage.java类的意图数据将被发送到具有自定义Arrayadapter的列表视图页面。然而,每次我添加一个新项目时,它都会覆盖我以前的项目。希望有一些善良的人可以帮助一个新的android。新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代码。这是我设置自定义列表视图的地方。

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()上,您应该获取以前的数据,并将它们和当前数据放入适配器。