- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个嵌套的回收器 View ,我想动态地将子项目添加到单个项目中,并且能够添加项目。我可以添加项目,但是当我添加子项目时,程序就会停止运行。我不确定如何让每个项目都具有独特数量的子项目。
点击添加子项目时出现错误代码
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.recycledviewpooltest, PID: 14770
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.recycledviewpooltest.SubItemAdapter.addExercise(com.example.recycledviewpooltest.SubItem)' on a null object reference
at com.example.recycledviewpooltest.ItemAdapter$ItemViewHolder$1.onClick(ItemAdapter.java:81)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
子项
import android.widget.Spinner;
public class SubItem {
private String mWorkoutName;
private String workoutNum;
private String munit;
private Spinner mUnitSpinner;
public SubItem(String workoutName, String num, String unit) {
mWorkoutName = workoutName;
workoutNum = num;
munit = unit;
}
public Spinner getmUnitSpinner() {
return mUnitSpinner;
}
public void setSpinner (Spinner _mUnitSpinner) {
mUnitSpinner = _mUnitSpinner;
}
public String getmWorkoutName() {
return mWorkoutName;
}
public String getWorkoutNum() {
return workoutNum;
}
public String getMunit() {
return munit;
}
public void setmWorkoutName(String mWorkoutName) {
this.mWorkoutName = mWorkoutName;
}
public void setWorkoutNum(String workoutNum) {
this.workoutNum = workoutNum;
}
public void setMunit(String munit) {
this.munit = munit;
}
}
子项适配器
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class SubItemAdapter extends RecyclerView.Adapter<SubItemAdapter.SubItemViewHolder> {
private ArrayList<SubItem> subItemList;
private SubItemController controller;
SubItemAdapter(ArrayList<SubItem> subItemList) {
this.subItemList = subItemList;
this.controller = SubItemController.getController();
}
@NonNull
@Override
public SubItemViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_sub_item, viewGroup, false);
return new SubItemViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull SubItemViewHolder holder, int i) {
SubItem currentItem = subItemList.get(i);
holder.workoutName.setText(currentItem.getmWorkoutName());
holder.workoutNum.setText(currentItem.getWorkoutNum());
currentItem.setSpinner(holder.workoutUnit);
// store the spinner in the DetailItem object
currentItem.setSpinner(holder.workoutUnit);
// store DetailItem object in the array
}
@Override
public int getItemCount() {
return subItemList.size();
}
class SubItemViewHolder extends RecyclerView.ViewHolder {
EditText workoutName;
EditText workoutNum;
Spinner workoutUnit;
SubItemViewHolder(View itemView) {
super(itemView);
workoutName = itemView.findViewById(R.id.workoutname);
workoutNum = itemView.findViewById(R.id.number);
workoutUnit = itemView.findViewById(R.id.unitspinner);
workoutUnit.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapter, View v,
int position, long id) {
// On selecting a spinner item
String sStep = adapter.getItemAtPosition(position).toString();
workoutUnit.setSelection(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
public void addExercise(SubItem exercise) {
controller.getListExercise().add(exercise);
notifyItemInserted(getItemCount());
}
}
子项 Controller
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
public class SubItemController {
private ArrayList<SubItem> exampleList;
private ArrayList<SubItem> initialList;
private static SubItemController controller;
private SubItemAdapter adapter;
public SubItemController(){
initMovieList();
}
private ArrayList<SubItem> initMovieList(){
if (this.exampleList == null) {
this.exampleList = new ArrayList<>();
exampleList.add(new SubItem("","", ""));
}
return this.exampleList;
}
public void addSubItem() {
SubItem item = new SubItem("","","");
exampleList.add(item);
}
public ArrayList<SubItem> buildInitialList() {
initialList = new ArrayList<SubItem>();
initialList.add(new SubItem("","",""));
return initialList;
}
public ArrayList<SubItem> getListExercise() {
return exampleList;
}
public static SubItemController getController(){
if(controller == null){
controller = new SubItemController();
}
return controller;
}
}
项目
import android.widget.Spinner;
import java.util.ArrayList;
import java.util.List;
public class Item {
private String mstructure;
private String mtype;
private ArrayList<SubItem> mList;
private Spinner structureSpinner;
private Spinner typeSpinner;
private SubItemController subItemController;
public Item(String structure, String type, ArrayList<SubItem> List){
mstructure = structure;
mtype = type;
mList = List;
subItemController = new SubItemController();
}
public Spinner getStructureSpinner() {
return structureSpinner;
}
public void setStructureSpinner(Spinner structureSpinner) {
this.structureSpinner = structureSpinner;
}
public Spinner getTypeSpinner() {
return typeSpinner;
}
public void setTypeSpinner(Spinner typeSpinner) {
this.typeSpinner = typeSpinner;
}
public String getMstructure() {
return mstructure;
}
public void setMstructure(String mstructure) {
this.mstructure = mstructure;
}
public String getMtype() {
return mtype;
}
public void setMtype(String mtype) {
this.mtype = mtype;
}
public ArrayList<SubItem> getmList() {
return subItemController.getListExercise();
}
public void addExercise() {
subItemController.addSubItem();
}
}
项目适配器
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemViewHolder> {
private RecyclerView.RecycledViewPool viewPool = new RecyclerView.RecycledViewPool();
private ArrayList<Item> itemList;
private ArrayList<SubItem> subItemList = new ArrayList<>();
private SubItemAdapter adapter;
ItemAdapter(ArrayList<Item> itemList) {
this.itemList = itemList;
adapter = new SubItemAdapter(subItemList);
}
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_item, viewGroup, false);
return new ItemViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ItemViewHolder itemViewHolder, int i) {
Item item = itemList.get(i);
// Create layout manager with initial prefetch item count
LinearLayoutManager layoutManager = new LinearLayoutManager(
itemViewHolder.rvSubItem.getContext(),
LinearLayoutManager.VERTICAL,
false
);
layoutManager.setInitialPrefetchItemCount(item.getmList().size());
// Create sub item view adapter
SubItemAdapter subItemAdapter = new SubItemAdapter(item.getmList());
itemViewHolder.rvSubItem.setLayoutManager(layoutManager);
itemViewHolder.rvSubItem.setAdapter(subItemAdapter);
itemViewHolder.rvSubItem.setRecycledViewPool(viewPool);
}
@Override
public int getItemCount() {
return itemList.size();
}
class ItemViewHolder extends RecyclerView.ViewHolder {
public Spinner structureSpinner;
public Spinner typeSpinner;
private RecyclerView rvSubItem;
private Button addExerciseButton;
private SubItemAdapter adapter;
ItemViewHolder(View itemView) {
super(itemView);
structureSpinner = itemView.findViewById(R.id.strucure_spinner);
typeSpinner = itemView.findViewById(R.id.type_spinner);
rvSubItem = itemView.findViewById(R.id.rv_sub_item);
addExerciseButton = itemView.findViewById(R.id.addExerciseButton);
addExerciseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.addExercise(new SubItem("","",""));
}
});
}
}
}
主要 Activity
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private Button addExerciseButton;
private Button addSetButton;
private SubItemController subItemController;
int numOfItem = 0;
int numOfSubItem = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RecyclerView rvItem = findViewById(R.id.rv_item);
LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);
ItemAdapter itemAdapter = new ItemAdapter(buildItemList());
rvItem.setAdapter(itemAdapter);
rvItem.setLayoutManager(layoutManager);
addSetButton = findViewById(R.id.addSetButton);
addSetButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addSet();
ItemAdapter itemAdapter = new ItemAdapter(buildItemList());
rvItem.setAdapter(itemAdapter);
}
});
}
private ArrayList<Item> buildItemList() {
subItemController = new SubItemController();
ArrayList<Item> itemList = new ArrayList<>();
for (int i=0; i<numOfItem; i++) {
Item item = new Item("","",subItemController.getListExercise());
itemList.add(item);
}
return itemList;
}
private void addSet() {
numOfItem++;
}
}
Activity 主
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="12dp"
android:text="Add Set"
android:id="@+id/addSetButton"
android:layout_gravity="center"
/>
</LinearLayout>
布局项目
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardBackgroundColor="#f3f3f3"
app:cardElevation="8dp"
android:layout_margin="12dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="12dp"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Spinner
android:id="@+id/strucure_spinner"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_marginStart="50dp"
android:entries="@array/workoutStructure"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Spinner
android:id="@+id/type_spinner"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_marginEnd="50dp"
android:entries="@array/workoutType"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_sub_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/addExerciseButton"
android:layout_gravity="center"
android:text="Add Exercise"
/>
"
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
布局子项目
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.cardview.widget.CardView
android:id="@+id/addworkoutcardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/structurespinner"
android:padding="5dp"
app:cardCornerRadius="4dp"
app:layout_constraintTop_toBottomOf="@+id/structurespinner"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<EditText
android:id="@+id/number"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_toRightOf="@+id/workoutname"/>
<EditText
android:id="@+id/workoutname"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_marginEnd="19dp"
android:ems="10"
android:layout_marginRight="19dp" />
<Spinner
android:id="@+id/unitspinner"
android:layout_width="120dp"
android:layout_height="50dp"
android:layout_marginStart="7dp"
android:layout_toRightOf="@+id/number"
android:entries="@array/workoutUnit"
android:layout_toEndOf="@+id/number"
android:layout_marginLeft="7dp" />
</RelativeLayout>
</androidx.cardview.widget.CardView>
</FrameLayout> ```
最佳答案
在ItemAdapter
ItemViewHolder(View itemView) {
super(itemView);
structureSpinner = itemView.findViewById(R.id.strucure_spinner);
typeSpinner = itemView.findViewById(R.id.type_spinner);
rvSubItem = itemView.findViewById(R.id.rv_sub_item);
addExerciseButton = itemView.findViewById(R.id.addExerciseButton);
addExerciseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter = new SubItemAdapter(subItemList);
adapter.addExercise(new SubItem("","",""));
}
});
你必须做新的适配器(SubItemAdapter
)
关于java - 使用按钮在嵌套回收器 View 中动态添加子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62207088/
所以我有这个 javascript 片段,它有两个按钮可以进入全屏,一个按钮可以退出全屏。我想做到这一点,如果我不在全屏模式下,按钮会显示转到全屏模式,而当我处于全屏模式时,按钮会显示退出全屏模式..
我在自定义控件中添加了一个新属性作为可扩展属性,例如属性网格中的字体属性。在 Windows 窗体应用程序项目中使用我的自定义控件后,我在属性网格中看到一个省略号 (…) 按钮,如字体属性的“…”按钮
我在自定义控件中添加了一个新属性作为可扩展属性,例如属性网格中的字体属性。在 Windows 窗体应用程序项目中使用我的自定义控件后,我在属性网格中看到一个省略号 (…) 按钮,如字体属性的“…”按钮
我尝试将 Twitter 上的“Tweet Me”按钮 ( http://twitter.com/goodies/tweetbutton ) 添加到我的网站。然而,每当按下按钮时,我都会收到此 Jav
我试图在我的文本区域中获取一个按钮值,如果我使用 则工作正常但如果我使用那么它就不起作用了。你能找出问题所在吗? HTML 1 2 3 4 JavaScript $(document).read
我的 C# Winform 面板中有一堆文本框。每行文本框的命名如下: tb1 tbNickName1 comboBox1 tb2 tbNickName2 comboBox2 tb3 tbNickNa
我有一个表单,其中过滤器下方有按钮(应用过滤器和清除过滤器),我试图在单击“应用”按钮时显示“清除”,并在单击“清除”按钮时隐藏“清除”按钮。 下面的代码(如果我的表有的话):
excel 按钮正在工作,但是当我添加 pdf 按钮时,它添加仅显示 pdf 按钮 excel 按钮在 pdf 按钮添加后隐藏 $(document).ready(function() { $
我想创建一个 div 作为标题并分成 3 列,并按以下顺序在其中放置 2 个按钮和一个标题:Button1(左位) Title(居中) Button2(右位) 这是我为这个 div 编写的代码:
仅当选中所有框时才应禁用“允许”按钮。我该怎么做?我已经完成了 HTML 部分,如下所示。如何执行其中的逻辑部分?即使未选中一个复选框,也应禁用“允许”按钮
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
如您所知,您可以使用 2 种方法在 HTML5 中呈现按钮: 使用 void 元素 或 如果您需要内容,请使用 元素(不是空元素)。 在JSF2中,有2种方式生成按钮;与UICommand或 UIOu
我尝试根据表单元素的更改禁用/启用保存按钮。但是,当通过弹出按钮选择更改隐藏输入字段值时,保存按钮不受影响。 下面是我的代码。我正在尝试序列化旧的表单值并与更改后的表单值进行比较。但我猜隐藏的字段值无
我有用于在消息(电子邮件、短信)上输入内容的 EditText。我希望在单击 ActionDone 按钮时立即发布消息。我为此使用以下代码: message.setOnEditorActionList
我的 Android 应用程序中有一堆 EditText,每个都将 InputMethod 设置为 numberSigned。我的目标设备没有硬件键盘,而是使用软件键盘输入数字。 Android 将输
我无法以编程方式隐藏弧形菜单中的 fab 按钮。我正在使用https://github.com/saurabharora90/MaterialArcMenu在我的代码中。如何在Java中以编程方式隐藏
我已经看到这在其他类型的对话框窗口中是可能的,例如“showConfirmDialog”,其中可以指定按钮的数量及其名称;但是使用“showInputDialog”时是否可以实现相同的功能?我似乎无法
相同的按钮用于激活和停用。第一次,当代码运行按钮单击并成功“停用”时。但第二次,代码无法找到该元素。第一个案例按钮位于第二个“a”标签中,然后停用第一个“a”标签中的按钮。 案例1: Edit
是否可以将按钮的 onclick 操作设置为 JavaScript 变量?这个想法是我们用 JavaScript 控制一个表。每当点击该表的一行时,我们就会更新一个 JavaScript 变量。该 v
我想创建一个按钮,它包含左侧的文本和右侧的复选框(或任何其他组件)。我怎样才能做到这一点? 我发现我可以制作自己的 View extends Button,但是如果可以的话我应该如何实现 onDraw
我是一名优秀的程序员,十分优秀!