Java I';我想通过单击外部recyclerview上的按钮来添加内部网格视图

Java I';我想通过单击外部recyclerview上的按钮来添加内部网格视图,java,android,Java,Android,我想通过单击外部回收器视图(地板)上的按钮来添加内部网格视图(房间)。但onBindViewHolder中出现空指针扩展。请帮帮我 public class FloorAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements OnFloorItemClickListener { OnFloorItemClickListener listener; static public Ar

我想通过单击外部回收器视图(地板)上的按钮来添加内部网格视图(房间)。但onBindViewHolder中出现空指针扩展。请帮帮我

public class FloorAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements OnFloorItemClickListener {

    OnFloorItemClickListener listener;
    static public ArrayList<FloorData> floors;
    private Context context;
    private LayoutInflater layoutInflater;
    private OnItemClickListener mListener = null;

    public FloorAdapter(ArrayList<FloorData> floors, Context context) {
        this.floors = floors;
        this.context = context;
        this.layoutInflater = LayoutInflater.from(context);
    }

    public interface OnItemClickListener{
        void onItemClick(View v, int pos);
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        this.mListener = listener ;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = layoutInflater.inflate(R.layout.signle_floor, parent, false);
        return new GridViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ((GridViewHolder)holder).recyclerView.setAdapter(new RoomAdapter(context, floors.get(position).rooms));
        ((GridViewHolder)holder).recyclerView.setLayoutManager(new GridLayoutManager(context, 2));
        ((GridViewHolder)holder).recyclerView.setHasFixedSize(true);
        ((GridViewHolder)holder).tvFloorNum.setText(String.valueOf(floors.get(position).floorNum));
    }

    @Override
    public int getItemCount() {
        return floors.size();
    }

    @Override public void onItemClick(RecyclerView.ViewHolder holder, View view, int position) {
        if(listener != null){
            listener.onItemClick(holder,view,position);
        }
    }

    @Override
    public int getItemViewType(int position) {
        return floors.get(position).id;
    }

    public class GridViewHolder extends RecyclerView.ViewHolder {
        RecyclerView recyclerView;
        TextView tvFloorNum;
        Button btnPlusRoom;

        public GridViewHolder(View itemView) {
            super(itemView);
            recyclerView = itemView.findViewById(R.id.rvRooms);
            tvFloorNum = itemView.findViewById(R.id.tvRoomNumber);
            btnPlusRoom = (Button)itemView.findViewById(R.id.btnPlusRoom);
            btnPlusRoom.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v)
                {
                    int pos = getAdapterPosition();
                    if (pos != RecyclerView.NO_POSITION)
                    {
                        if(mListener != null){
                            mListener.onItemClick(v, pos);
                        }

                    }
                }

            });
        }
    }
}
public类FloorAdapter扩展了RecyclerView。适配器实现了OnFloorItemClickListener{
OnFloorriteMClickListener侦听器;
静态公共阵列列表楼层;
私人语境;
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
私有侦听器mListener=null;
公共楼层编辑器(ArrayList楼层,上下文){
这个。楼层=楼层;
this.context=上下文;
this.layoutInflater=layoutInflater.from(上下文);
}
公共接口侦听器{
虚线单击(视图v,内部位置);
}
公共void setOnItemClickListener(OnItemClickListener侦听器){
this.mListener=侦听器;
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图=布局更平坦。充气(R.layout.signle_floor,parent,false);
返回新的GridViewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
((GridViewHolder)holder.recyclerView.setAdapter(新的RoomAdapter(上下文、楼层、获取(位置)、房间));
((GridViewHolder)holder.recyclerView.setLayoutManager(新的GridLayoutManager(上下文,2));
((GridViewHolder)holder.recyclerView.setHasFixedSize(true);
((GridViewHolder)holder.tvFloorNum.setText(String.valueOf(floors.get(position.floorNum));
}
@凌驾
public int getItemCount(){
返回楼层。大小();
}
@覆盖公共视图单击(RecyclerView.ViewHolder holder,视图视图,int位置){
if(侦听器!=null){
listener.onItemClick(支架、视图、位置);
}
}
@凌驾
public int getItemViewType(int位置){
返回楼层.get(position).id;
}
公共类GridViewHolder扩展了RecyclerView.ViewHolder{
回收视图回收视图;
文本视图tvFloorNum;
按钮btnPlusRoom;
公共GridViewHolder(视图项视图){
超级(项目视图);
recyclerView=itemView.findViewById(R.id.rvRooms);
tvFloorNum=itemView.findViewById(R.id.tvRoomNumber);
btnPlusRoom=(按钮)itemviewbyd(R.id.btnPlusRoom);
btnPlusRoom.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v)
{
int pos=getAdapterPosition();
如果(位置!=RecyclerView.无位置)
{
if(mListener!=null){
姆利斯腾纳·奥尼麦克利克(v,位置);
}
}
}
});
}
}
}
公共类RoomAdapter扩展了RecyclerView.Adapter{
私人语境;
私人阵列式房间;
私人充气机;
公共RoomAdapter(上下文、ArrayList rooms){
this.context=上下文;
这个房间=房间;
this.inflater=layoutiner.from(上下文);
}
@凌驾
public CustomViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图;
视图=充气机。充气(右布局。单人间,父级,假);
返回新的CustomViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull CustomViewHolder,int位置){
RoomData room=rooms.get(位置);
holder.tvRoomNum.setText(String.valueOf(room.roomNum));
}
@凌驾
public int getItemCount(){
返回房间。大小();
}
公共静态类CustomViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图tvRoomNum;
公共CustomViewHolder(查看项目视图){
超级(项目视图);
tvRoomNum=(TextView)itemView.findViewById(R.id.tvRoomNumber);
}
}
}
公共类RoomActivity扩展了AppCompatActivity{
私家废物回收站;
私人楼层雷达楼层雷达;
公共ArrayList globalfloors;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局、活动室);
globalfloors=prepareData();
rvFloor=findViewById(R.id.rvFloors);
floorAdapter=新的floorAdapter(全球楼层、RoomActivity.this);
LinearLayoutManager=newlinearlayoutmanager(RoomActivity.this);
rvFloor.setLayoutManager(经理);
rvFloor.setAdapter(FloorRadapter);
floorAdapter.setOnItemClickListener(新的floorAdapter.OnItemClickListener(){
@凌驾
公共空间单击(视图v,内部位置){
FloorData floor=全局地板。获取(位置);
RoomData newRoom=新建RoomData();
floor.finalRoomNum++;
newRoom.roomNum=floor.finalRoomNum;
楼层。房间。添加(新房间);
rvFloor.setAdapter(FloorRadapter);
}
});
}
private ArrayList prepareData(){
ArrayList楼层=新建ArrayList();
//첫번째 主题추가
FloorData floor1=新的FloorData();
地板1.floorNum=1;
RoomData room101=新的RoomData();
room101.roomNum=101;
RoomData room102=新RoomData();
room102.roomNum=102;
RoomData room103=新的RoomData();
room103.roomNum=103;
楼层1.finalRoomNum=103;
楼层1.房间。增加(101房间);
楼层1.房间。新增(102房间);
楼层1.房间。增加(103房间);
楼层。添加(楼层1);
FloorData floor2=新的FloorData();
地板2.floorNum=2;
public class RoomAdapter extends RecyclerView.Adapter<RoomAdapter.CustomViewHolder> {
    private Context context;
    private ArrayList<RoomData> rooms;
    private LayoutInflater inflater;

    public RoomAdapter(Context context, ArrayList<RoomData> rooms) {
        this.context = context;
        this.rooms = rooms;
        this.inflater = LayoutInflater.from(context);
    }

    @Override
    public CustomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        view = inflater.inflate(R.layout.single_room, parent, false);
        return new CustomViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull CustomViewHolder holder, int position) {
        RoomData room = rooms.get(position);
        holder.tvRoomNum.setText(String.valueOf(room.roomNum));
    }


    @Override
    public int getItemCount() {
        return rooms.size();
    }


    public static class CustomViewHolder extends RecyclerView.ViewHolder {
        public TextView tvRoomNum;

        public CustomViewHolder(View itemView) {
            super(itemView);
            tvRoomNum = (TextView) itemView.findViewById(R.id.tvRoomNumber);

        }
    }
}
public class RoomActivity extends AppCompatActivity {

    private RecyclerView rvFloor;
    private FloorAdapter floorAdapter;
    public ArrayList<FloorData> globalfloors;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_room);


        globalfloors = prepareData();

        rvFloor = findViewById(R.id.rvFloors);

        floorAdapter = new FloorAdapter(globalfloors, RoomActivity.this);
        LinearLayoutManager manager = new LinearLayoutManager(RoomActivity.this);
        rvFloor.setLayoutManager(manager);
        rvFloor.setAdapter(floorAdapter);


        floorAdapter.setOnItemClickListener(new FloorAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View v, int position) {
                FloorData floor = globalfloors.get(position);
                RoomData newRoom = new RoomData();
                floor.finalRoomNum++;
                newRoom.roomNum = floor.finalRoomNum;
                floor.rooms.add(newRoom);
                rvFloor.setAdapter(floorAdapter);
            }
        });
    }

    private ArrayList<FloorData> prepareData() {
        ArrayList<FloorData> floors = new ArrayList<FloorData>();

        //첫번째 subject 추가
        FloorData floor1 = new FloorData();
        floor1.floorNum = 1;

        RoomData room101 = new RoomData();
        room101.roomNum = 101;

        RoomData room102 = new RoomData();
        room102.roomNum = 102;

        RoomData room103 = new RoomData();
        room103.roomNum = 103;

        floor1.finalRoomNum = 103;
        floor1.rooms.add(room101);
        floor1.rooms.add(room102);
        floor1.rooms.add(room103);
        floors.add(floor1);

        FloorData floor2 = new FloorData();
        floor2.floorNum = 2;
        floor2.finalRoomNum = 200;

        floors.add(floor2);
        return floors;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".tools.RewardActivity"
    android:orientation="vertical">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolBar_room"
        android:layout_width="match_parent"
        android:layout_gravity="center"
        android:layout_height="60dp"
        android:background="@color/colorPrimaryDark"
        app:title="호실 등록"
        android:theme="@style/ToolbarTheme" />


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rvFloors"

        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">


    <LinearLayout
        android:orientation="vertical"
        android:background="#FFFFFF"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="15dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/tvFloorNum"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="8dp"
                android:textSize="30dp"
                android:textColor="#000000" />

            <Button
                android:id="@+id/btnPlusRoom"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:text="+"
                android:textSize="30dp"
                android:layout_marginTop="10dp"
                android:background="@color/colorPrimaryDark"/>

        </LinearLayout>
        <androidx.recyclerview.widget.RecyclerView
            android:columnCount="5"
            android:id="@+id/rvRooms"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="2dp">


        <TextView
            android:id="@+id/tvRoomNumber"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="5dp"
            android:ellipsize="end"
            android:singleLine="true"
            android:background="@color/colorAccent"
            android:gravity="center"
            android:textSize="30dp"

            />

    </LinearLayout>

</LinearLayout>
 tvFloorNum = itemView.findViewById(R.id.tvRoomNumber);
 tvFloorNum = itemView.findViewById(R.id.tvFloorNumber);