2016-08-11 2 views
0

Я немного потерялся здесь. Я пытаюсь добавить пользовательский объект (с 3 целыми числами, 1 двойным и 1 датой) в arraylist при нажатии кнопки. Я хочу, чтобы arraylist отображался в другом списке классов. До сих пор это то, что у меня есть для пользовательского класса:Добавление пользовательского объекта в arraylist при нажатии кнопки

ublic class Record { 

private Integer squat, bench, dead; 
private double total; 
private Date dateTime; 

public Record(int squat, int bench, int dead, double total, Date date) { 
    this.bench = bench; 
    this.dateTime = date; 
    this.dead = dead; 
    this.squat = squat; 
    this.total = total; 
} 

public Integer getSquat() { 
    return squat; 
} 

public void setSquat(Integer squat) { 
    this.squat = squat; 
} 

public Integer getBench() { 
    return bench; 
} 

public void setBench(Integer bench) { 
    this.bench = bench; 
} 

public Integer getDead() { 
    return dead; 
} 

public void setDead(Integer dead) { 
    this.dead = dead; 
} 

public Double getTotal() { 
    return total; 
} 

public void setTotal(Integer total) { 
    this.total = total; 
} 

public Date getDateTime() { 
    return dateTime; 
} 

public void setDateTime(Date dateTime) { 
    this.dateTime = dateTime; 
} 
} 

EDIT: Classname: MyMaxes.class: В классе, где щелкнули кнопку, у меня есть это (я не уверен, как получить ток дата, когда кнопка нажата):

public ArrayList<Record> records = new ArrayList<>(); 
maxTotal = maxDead + maxBench + maxSquat; 
int maxDead = Integer.parseInt(mEditTextDead.getText().toString()); 
       int maxSquat = Integer.parseInt(mEditTextSquat.getText().toString()); 
       int maxBench = Integer.parseInt(mEditTextBench.getText().toString()); 


       records.add(new Record(maxSquat, maxBench, maxDead, maxTotal,)); 

Edit: имя класса = MyProgress.class: А в классе я хочу, чтобы установить ListView к этому ArrayList (я не уверен, как получить ArrayList от другого класс):

RecordAdapter adapter = new RecordAdapter(getApplicationContext(),R.layout.custom_record); 


    ListView listViewRec = (ListView) findViewById(R.id.listViewRecord); 

} 

Это мой класс RecordAdapter, но им не уверен, что добавить туда либо:

public class RecordAdapter extends ArrayAdapter<Record> { 

public RecordAdapter(Context context, int resource) { 
    super(context, resource); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    return super.getView(position, convertView, parent); 

} 
} 

Спасибо за любую помощь

+0

Пожалуйста, укажите имена классов, которые содержат каждый фрагмент кода. Например, у какого класса есть 'ArrayList'? Кроме того, когда и где вы создаете экземпляр этого класса? –

+0

Что касается даты, вы хотите автоматически получить текущую дату или вы хотите разрешить пользователю выбирать дату? –

+0

Кроме того, сбивает с толку, что у вас есть два адаптера: 'adapter' и' arrayAdapter'. Какова цель этого? –

ответ

1

Я думаю, что проблема заключается в том, что у вас есть два различных адаптеров:

RecordAdapter adapter = new RecordAdapter(getApplicationContext(),R.layout.custom_record); 
ArrayAdapter<Record> arrayAdapter = new ArrayAdapter<Record>(this, R.layout.custom_record, records); 

Вы должны использовать тот или иной, а не тот и другой. Похоже, что arrayAdapter должен работать. Поэтому измените весь свой код, чтобы использовать его.

В качестве альтернативы вы можете использовать свой пользовательский номер RecordAdapter. Если вы сделаете это, тогда вы должны создать ArrayList внутри этого класса. Затем, когда пользователь нажимает кнопку, вы отправляете новый объект Record в экземпляр RecordAdapter. Самый простой способ сделать это - добавить addRecord() метод к RecordAdapter.

Get Current Date:

Все, что вам нужно сделать, это создать новый объект Date:

Date currentDate = new Date(); 

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

+0

Спасибо, я проведу массив arrayAdapter, мне просто нужно выяснить, как добавить дату в мою строку. records.add (новая запись (maxSquat, maxBench, maxDead, maxTotal)); – LBJ33

+0

Также, как я могу остановить его от предоставления ошибки NPE при настройке listview на arrayAdapter, если в массиве записей нет элементов? – LBJ33

+0

Спасибо за дату, у меня есть еще одна проблема .. где я создаю новый ArrayAdapter, записи подчеркнуты, и в нем говорится «Expression Expected» .. Должен ли я как-то вызывать записи arraylist из другого класса? – LBJ33

1

Вам не нужен пользовательский номер RecordAdapter. Вам также не нужен ArrayList. Вы можете лечить свой ArrayAdapter как ArrayList, который подается в ваш ListView. Все, что вам нужно сделать, это создать ArrayAdapter и заполнить его так же, как вы делаете с ArrayList:

public ArrayAdapter<Record> records = new ArrayAdapter<>(getApplicationContext(), R.layout.custom_record); 
maxTotal = maxDead + maxBench + maxSquat; 
int maxDead = Integer.parseInt(mEditTextDead.getText().toString()); 
int maxSquat = Integer.parseInt(mEditTextSquat.getText().toString()); 
int maxBench = Integer.parseInt(mEditTextBench.getText().toString()); 


records.add(new Record(maxSquat, maxBench, maxDead, maxTotal)); 

Затем, когда вы хотите, чтобы добавить запись к вам ListView, используйте:

records.add(new Record(maxSquat, maxBench, maxDead, maxTotal)); 

EDIT:

Забыл очень важную роль. Вы должны получить свой ListView и установить ArrayAdapter, чтобы заполнить его.

ListView listViewRec = (ListView) findViewById(R.id.listViewRecord); 
listViewRec.setAdapter(records); 
+0

К сожалению, это не сработало, у меня больше нет ошибок, но элементы не добавляются в список в отдельном классе. – LBJ33

+0

Я чувствую, что мне нужно установить значения разных текстовых просмотров в моем настраиваемом макете custom_record.xml .. поэтому он знает, где поставить значение, не уверен, где это сделать. – LBJ33

+0

@ LBJ33 Вам нужно указать параметры 'from' и' to' для ' ArrayAdapter'. Это заполнит 'TextView' для вас. –