- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些代码可以将对象添加到 arrayList
并将它们显示在 ListView
中 - 这非常有效
然后我通过 Intent 发送数组 - 它被完美接收
现在……
我想用这个数组来填充一个Card (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();
}
}
这是使用适配器的代码,因此它从其他 Activity 接收数组并将其提供给适配器:
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);
}
}
这是适配器,现在它是错误的并向我抛出一个数组越界错误,我已经知道为什么,但我想我会分享我的尝试,之前的那个每次都创建新卡并且只改变了 1行:
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);
}
}
}
最佳答案
事实证明,这实际上是不可能的,虽然它可能是可行的,但它会非常非常非常困难。我刚刚创建了一个类,它存储列表和练习的名称,然后在我刚刚使用的适配器中
@Override
public void onBindViewHolder(ContactViewHolder contactViewHolder, int i) {
Card card = cards.get(i);
List<Set> sets = card.getSet();
int x = sets.size();
int count = 0;
for(Set set : sets) {
if(count == 0) {
contactViewHolder.vName.setText(set.getName());
contactViewHolder.vReps.setText(set.getReps() + "");
contactViewHolder.vWeight.setText(set.getWeight() + "");
} if(count == 1) {
contactViewHolder.vReps1.setText(set.getReps() + "");
contactViewHolder.vWeight1.setText(set.getWeight() + "");
} if(count == 2) {
contactViewHolder.vReps2.setText(set.getReps() + "");
contactViewHolder.vWeight2.setText(set.getWeight() + "");
} if(count == 3) {
contactViewHolder.vReps3.setText(set.getReps() + "");
contactViewHolder.vWeight3.setText(set.getWeight() + "");
} if(count == 4) {
contactViewHolder.vReps4.setText(set.getReps() + "");
contactViewHolder.vWeight4.setText(set.getWeight() + "");
} if(x > 4) {
contactViewHolder.vShowMore.setText((x - 5) + " More");
}
count++;
}
}
它现在显示了我需要的内容,而且阅读起来也更简单了。
关于java - 使用对象的 ArrayList 填充 CardView android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29502220/
当用户按下 FAB 时,一个 cardview 被添加到 recyclerview。每个卡片 View 内都有一个复选框。我想这样做,以便当用户勾选特定卡片 View 中的复选框时,该特定卡片 Vie
我有一个 CardView inside 另一个 CardView,但是 child CardView周围没有阴影。知道为什么吗?
我发现 CardView 的影子有非常奇怪的行为。我刚开始开发一个应用程序,绝对没有任何业务逻辑或类似的东西。但无论如何…… 我只是在 fragment 布局中添加了几个 View ,然后发现每次屏幕
我有一个 CardView,里面有一些圆角半径,它是三个相对布局。当我设置顶部与 CardView 顶部对齐的布局背景时,圆角半径丢失。 如何保持圆角半径? 代码:
在我更新了我的 android studio 3.3 并将我的项目迁移到 androidx 工件后,我的卡片 View 高程停止工作并显示阴影。
我正在使用 CardView 在可滚动 GridLayout 中显示我的 ImageView 。但是,当我转到“设计”选项卡时,它看起来很好,但当我在设备上运行时,它看起来不同。 在布局上它显示为 当
这是代码 fragment : 这是最终结果: 我想要的是嵌套圆角半径的外观,它也会影响 ImageView。我已经为两个卡片 View 提供了 corner
一个简单的问题,我使用 CardView 向 Button 添加高度,但是在分配 cardElevation 时,CardView 在内部绘制了一个框本身,我尝试切换海拔和其他属性,我可以通过增加 c
我想在点击卡片 View 时添加链式 react ,奇怪的是它没有出现? 这里可能出了什么问题? //我有一个线性布局,在 cardview 中有三个 textview。 回收 View :
我是 android 的新手,使用 Kotlin 编写应用程序并使用 Anko 生成 View 。 我想使用 cardView 的 anko 版本,但 android studio 以红色突出显示错误
我的卡片 View 中有两个 ImageView ,现在如何设置 OnClickListeners 以便我可以知道在哪个卡片 View 中选择了哪个按钮。 im1 和 im2 是我的可点击 Image
我在编辑包含 Relativelayout 的 Cardview 中的 RelativeLayout 时搞砸了! ConstraintLayout 会将相对布局的 wrap_content 更改为 0
我想弄清楚如何在创建并传递 CardView 后修改某个 ImageView 或 TextView 小部件到主 RecyclerView。 所以我的代码如下: 首先是保存项目的类: public c
我在 CardView 中有一个 RecyclerView 但我有问题,我在 RecyclerView 底部有 2 个按钮,所以我把它们放在RelativeLayout 的末尾并给它们 parent_
如何在下面的屏幕截图中将 cardview 放在父级 cardview 之上? 当我将图像放入 CardView 时导致我的视图损坏 正确的观点必须是: 我的 xml 布局:
我正在尝试实现 this图书馆。此处编写的示例代码是用 Kotlin 编写的,但我的项目是用 Java 编写的,因此我尝试将代码从 Kotlin 转换为 Java。但是我收到以下错误: android
这是上下文中卡片 View 的布局: 我只希望图标 (imageview) 可以点击。这个 card
我有一个卡片 View ,里面有一个 ListView 。我也需要 ListView 中的点击项,我也希望能够使用 ontouchlistener 移动整个卡片 View 。我在卡片 View 上设置
我正在制作一个项目,但是当我编译我的项目并在 Android Studio 上启动应用程序时,我的应用程序崩溃了。 在我的 Logcat 错误中 Process: com.passionategeek
当我弄清楚 Material 样式时,我错过了必须为卡片 View 添加支持库依赖项的部分。相反,我使用了一个简单的标签。 它没有引发错误,甚至设计预览也显示了其中的卡片。但是当我在 Android
我是一名优秀的程序员,十分优秀!