Это довольно сложно объяснить, пожалуйста, пожалуйста, со мной!Заполнение карты с помощью ArrayList объектов android
В принципе, у меня есть некоторый код, который добавляет объекты к arrayList
и отображает их в ListView
- это прекрасно работает
я отправить массив через намерения - он получил отлично
Сейчас. ..
Я хочу использовать этот массив для заполнения открытку(android.support.v7.widget.CardView)
Я использую RecyclerView
для отображения карт, но моя единственная проблема есть, Адаптер RecyclerView
выполняет итерацию по заданному массиву и добавляет карту в элемент в массиве с помощью позиции.
Я хочу использовать объекты в массиве для заполнения одной карты. Скажите, пожалуйста, если вам нужно, чтобы я объяснил это лучше, это довольно сложно сказать!
Вот код:
Это код, который добавляет элементы в listView
и массив:
public class AddExerciseView extends ActionBarActivity {
TrackDatabaseAdapter mTrackDatabaseAdapter;
TextView workoutName;
EditText weight, reps;
double weightCount;
int repsCount;
ListView list;
Button plus, plus2, minus, minus2, update;
String name;
int type, category, count;
Exercise ex;
ArrayList<Set> array;
private AddExerciseAdapter mAddExerciseAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_workout_view);
Bundle extras = getIntent().getExtras();
if (extras != null) {
name = extras.getString("ExerciseName");
type = extras.getInt("ExerciseType");
category = extras.getInt("ExerciseCategory");
}
mTrackDatabaseAdapter = new TrackDatabaseAdapter(this);
ActionBar actionBar = AddExerciseView.this.getSupportActionBar();
if (actionBar != null) {
actionBar.setTitle(name);
}
ex = new Exercise(name, type, category);
Log.v("Exercise Recieved", ex.toString());
workoutName = (TextView) findViewById(R.id.name);
weight = (EditText) findViewById(R.id.textWeight);
reps = (EditText) findViewById(R.id.textRep);
list = (ListView) findViewById(R.id.rowReps);
plus = (Button) findViewById(R.id.plus);
minus = (Button) findViewById(R.id.minus);
plus2 = (Button) findViewById(R.id.plus2);
minus2 = (Button) findViewById(R.id.minus2);
update = (Button) findViewById(R.id.update);
weightCount = 0;
repsCount = 0;
count = 1;
array = new ArrayList<>();
plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!weight.getText().toString().equals("")) {
weightCount = Double.parseDouble(weight.getText().toString());
weightCount = weightCount + 2.5;
weight.setText(String.valueOf(weightCount));
} else {
weight.setText(String.valueOf(2.5));
}
}
});
minus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (weightCount <= 0.0 || weight.getText().toString().equals("")) {
weight.setText(String.valueOf(0.0));
} else {
weightCount = Double.parseDouble(weight.getText().toString());
weightCount = weightCount - 2.5;
weight.setText(String.valueOf(weightCount));
}
}
});
plus2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!reps.getText().toString().equals("")) {
repsCount = Integer.parseInt(reps.getText().toString());
repsCount = repsCount + 1;
reps.setText(String.valueOf(repsCount));
} else {
reps.setText(String.valueOf(0));
}
}
});
minus2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (repsCount <= 0 || reps.getText().toString().equals("")) {
reps.setText(String.valueOf(0));
} else {
repsCount = Integer.parseInt(reps.getText().toString());
repsCount = repsCount - 1;
reps.setText(String.valueOf(repsCount));
}
}
});
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (weight.getText().toString().equals("") || weight.getText().toString().equals(String.valueOf(0.0))) {
weight.setText(String.valueOf(0.0));
Toast.makeText(getApplicationContext(), "You need to enter a weight!", Toast.LENGTH_SHORT).show();
} else if (reps.getText().toString().equals("") || reps.getText().toString().equals(String.valueOf(0))) {
reps.setText(String.valueOf(0));
Toast.makeText(getApplicationContext(), "You need to have at least 1 rep!", Toast.LENGTH_SHORT).show();
} else {
double temp2 = Double.parseDouble(weight.getText().toString());
int temp3 = Integer.parseInt(reps.getText().toString());
Set s = new Set(name, temp2, temp3);
array.add(s);
mAddExerciseAdapter.notifyDataSetChanged();
mTrackDatabaseAdapter.insertEntry(name, temp2, temp3);
count++;
}
}
});
mAddExerciseAdapter = new AddExerciseAdapter(getApplicationContext(), R.layout.row2, array);
list.setAdapter(mAddExerciseAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_add_exercise, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
if (id == R.id.action_done) {
Intent intent = new Intent(AddExerciseView.this, MainMenuView2.class);
intent.putParcelableArrayListExtra("array", array);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
}
Это код, который использует адаптер, так что receivesthe массив от другой деятельности и передает ее на адаптер:
public class MainMenuView2 extends ActionBarActivity {
//List<Exercise> list = new ArrayList<>();
TrackDatabaseAdapter mTrackDatabaseAdapter;
List<Set> set = new ArrayList<>();
List<Set> test = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().getParcelableArrayListExtra("array") != null) {
set = getIntent().getParcelableArrayListExtra("array");
for (Set s : set) {
Log.d("Parcelable Array", s.toString());
}
}
mTrackDatabaseAdapter = new TrackDatabaseAdapter(this);
if (mTrackDatabaseAdapter.getAllCategories().size() == 0) {
test = mTrackDatabaseAdapter.getAllCategories();
}
Log.v("test array", test.toString());
setContentView(R.layout.main_menu2);
ActionBar actionBar = MainMenuView2.this.getSupportActionBar();
if (actionBar != null) {
actionBar.setTitle("ProjectME");
}
RecyclerView recList = (RecyclerView) findViewById(R.id.cardList);
recList.setHasFixedSize(false);
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
recList.setLayoutManager(llm);
CardAdapter ca = new CardAdapter(set);
recList.setAdapter(ca);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
if (id == R.id.action_add) {
Toast.makeText(this, "Add has been clicked!", Toast.LENGTH_SHORT).show();
Intent create = new Intent(MainMenuView2.this, CategoryListView.class);
startActivity(create);
}
if (id == R.id.action_copy) {
Toast.makeText(this, "Copy has been clicked!", Toast.LENGTH_SHORT).show();
}
if (id == R.id.action_cal) {
Toast.makeText(this, "Calendar has been clicked!", Toast.LENGTH_SHORT).show();
Intent create = new Intent(MainMenuView2.this, CalendarView.class);
startActivity(create);
}
return super.onOptionsItemSelected(item);
}
}
И это адаптер, сейчас это неправильно и th греб мне массив из Границы ошибок, я уже знаю, почему, но думал, что я разделю свою попытку, один перед только что создали новые карты каждый раз, менялся только одна строка:
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ContactViewHolder> {
private List<Set> contactList;
public CardAdapter(List<Set> contactList) {
this.contactList = contactList;
}
@Override
public int getItemCount() {
return contactList.size();
}
@Override
public void onBindViewHolder(ContactViewHolder contactViewHolder, int i) {
int x = contactList.size();
Log.v("array size", x + "");
if (contactList.get(i) != null) {
contactViewHolder.vName.setText(contactList.get(i).getName());
contactViewHolder.vReps.setText(contactList.get(i).getReps() + "");
contactViewHolder.vWeight.setText(contactList.get(i).getWeight() + "");
}
if (contactList.get(i + 1) != null) {
contactViewHolder.vName.setText(contactList.get(i).getName());
contactViewHolder.vReps1.setText(contactList.get(i + 1).getReps() + "");
contactViewHolder.vWeight1.setText(contactList.get(i + 1).getWeight() + "");
}
if (contactList.get(i + 2) != null) {
contactViewHolder.vName.setText(contactList.get(i + 2).getName());
contactViewHolder.vReps2.setText(contactList.get(i + 2).getReps() + "");
contactViewHolder.vWeight2.setText(contactList.get(i + 2).getWeight() + "");
}
if (contactList.get(i + 3) != null) {
contactViewHolder.vName.setText(contactList.get(i + 3).getName());
contactViewHolder.vReps3.setText(contactList.get(i + 3).getReps() + "");
contactViewHolder.vWeight3.setText(contactList.get(i + 3).getWeight() + "");
}
if (contactList.get(i + 4) != null) {
contactViewHolder.vName.setText(contactList.get(i + 4).getName());
contactViewHolder.vReps4.setText(contactList.get(i + 4).getReps() + "");
contactViewHolder.vWeight4.setText(contactList.get(i + 4).getWeight() + "");
}
if (contactList.size() > 4) {
contactViewHolder.vShowMore.setText("Show " + (contactList.size() - 5) + " more");
}
}
@Override
public ContactViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.
from(viewGroup.getContext()).
inflate(R.layout.card_view, viewGroup, false);
ContactViewHolder cvh = new ContactViewHolder(itemView);
return cvh;
}
public static class ContactViewHolder extends RecyclerView.ViewHolder {
protected TextView vName;
protected TextView vWeight;
protected TextView vReps;
protected TextView vWeight1;
protected TextView vReps1;
protected TextView vWeight2;
protected TextView vReps2;
protected TextView vWeight3;
protected TextView vReps3;
protected TextView vWeight4;
protected TextView vReps4;
protected TextView vShowMore;
public ContactViewHolder(View v) {
super(v);
vName = (TextView) v.findViewById(R.id.editText);
vWeight = (TextView) v.findViewById(R.id.textView7);
vReps = (TextView) v.findViewById(R.id.textView9);
vWeight1 = (TextView) v.findViewById(R.id.textView11);
vReps1 = (TextView) v.findViewById(R.id.textView13);
vWeight2 = (TextView) v.findViewById(R.id.textView15);
vReps2 = (TextView) v.findViewById(R.id.textView17);
vWeight3 = (TextView) v.findViewById(R.id.textView19);
vReps3 = (TextView) v.findViewById(R.id.textView21);
vWeight4 = (TextView) v.findViewById(R.id.textView23);
vReps4 = (TextView) v.findViewById(R.id.textView25);
vShowMore = (TextView) v.findViewById(R.id.textView32);
}
}
}
Любой помощь на все будет оценил, это проклятие моей жизни! Спасибо, SOF! :)