-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()上,您應該獲取以前的數據,並將它們和當前數據放入適配器。