有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java回收视图。setAdapter(安卓x.recyclerview.widget.recyclerview适配器

尝试在recycler视图内使用recycler视图第一个适配器工作正常,但第二个适配器从未运行 厌倦了一遍又一遍地修理它,什么都不管用。。。。帮助 第二个recycler视图是从Firebase检索数据

接收到来自firebase的数据,但从未设置为所需的文本视图


活动


public class ScheduleOrder extends AppCompatActivity implements IFirebaseLoadListener {

    DeviceSession deviceSession;
    UserSession userSession;
    String Device_Id="",User_Id="";
    MyItemAdapter myItemAdapter;
    IFirebaseLoadListener iFirebaseLoadListener;
    List<String> Name;
    List<ItemData>itemData;
    ItemData itemData1;
    RecyclerView my_recycler_view;

    DatabaseReference myData;



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

        itemData1=new ItemData();
        deviceSession = new DeviceSession(getApplicationContext());
        Device_Id = deviceSession.getDeviceDetails();

        userSession = new UserSession(getApplicationContext());
        final HashMap<String, String> user = userSession.getUserDetails();
        User_Id = user.get(UserSession.User_Id);

        FloatingActionButton myFab = (FloatingActionButton)findViewById(R.id.schedule_add);
        myFab.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent i = new Intent(getApplicationContext(),Schedule_Order.class);
                startActivity(i);
                finish();
            }
        });






        myData=FirebaseDatabase.getInstance().getReference("Cart_Schedule"+"/"+Device_Id);
        iFirebaseLoadListener=this;

        my_recycler_view=findViewById(R.id.my_recyclr_view);
        my_recycler_view.setHasFixedSize(true);
//        my_recycler_view1.setHasFixedSize(true);

        my_recycler_view.setLayoutManager(new LinearLayoutManager(this));
//        my_recycler_view1.setLayoutManager(new LinearLayoutManager(this));


        getFirebaseData();









    }

    private void getFirebaseData() {
        myData.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                List<ItemGroup>itemGroups=new ArrayList<>();

                Name=new ArrayList<>();
                for(DataSnapshot groupSnapShot:dataSnapshot.getChildren()){

                    ItemGroup itemGroup=new ItemGroup();

                    itemGroup.setD_Time(groupSnapShot.child("d_Time").getValue(true).toString());
                    itemGroup.setF_Amount(groupSnapShot.child("f_Amount").getValue(true).toString());

                    for(DataSnapshot newdatasnap:groupSnapShot.child("listItem").getChildren()){


                        itemData1.setA_Item_name(newdatasnap.child("a_Item_name").getValue().toString());
                        itemData1.setB_Quantity(newdatasnap.child("b_Quantity").getValue().toString());
                        itemData1.setC_Price(newdatasnap.child("b_Quantity").getValue().toString());
                        Name.add(newdatasnap.child("a_Item_name").getValue().toString());
                        Name.add(newdatasnap.child("c_Price").getValue().toString());
                        Name.add(newdatasnap.child("b_Quantity").getValue().toString());
                        Log.d("JADOO", "onDataChange: ??? "+itemData1.getA_Item_name());
                        Log.d("JADOO", "onDataChange: ??? "+itemData1.getB_Quantity());
                        Log.d("JADOO", "onDataChange: ??? "+itemData1.getC_Price());


                        Log.d("JADOO", "onDataChange: ??? "+Name);}


                    Log.d("JADOO", "onDataChange: ====================================================");

                    itemGroups.add(itemGroup);


                    Name.clear();
                }

                iFirebaseLoadListener.onFirebaseLoadSuccess(itemGroups);

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

                iFirebaseLoadListener.onFirebaseLoadFailed(databaseError.getMessage());
            }
        });
    }


    @Override
    public void onFirebaseLoadSuccess(List<ItemGroup> itemGroupList) {
        Log.d("JADOO", "onDataChange: Setting Adapter");
        MyItemGroupAdapter adapter = new MyItemGroupAdapter(ScheduleOrder.this,itemGroupList,itemData1);
        my_recycler_view.setAdapter(adapter);

    }

    @Override
    public void onFirebaseLoadFailed(String message) {

    }


}




第一个适配器Java文件

public class MyItemGroupAdapter extends RecyclerView.Adapter<MyItemGroupAdapter.MyViewHolder> {
    private Context context;
    private List<ItemGroup>dataList;
    private ItemData name;
    public MyItemGroupAdapter(Context context, List<ItemGroup> dataList,ItemData data) {
        this.context = context;
        this.dataList = dataList;
        this.name=data;
    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View itemView=LayoutInflater.from(context).inflate(R.layout.tempcartlayout,viewGroup,false);
        return new MyViewHolder(itemView);
    }
    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, int i) {
        MyItemAdapter itemListAdapter = new MyItemAdapter(context,name);
        myViewHolder.timee.setText(dataList.get(i).getD_Time());
        myViewHolder.cost.setText(dataList.get(i).getF_Amount());
        Log.d("JADOO", "onDataChange:  IN MY ITEM GRP ADAPTER "+name.getA_Item_name());
        myViewHolder.recycler_view_item_list.setHasFixedSize(true);
        myViewHolder.recycler_view_item_list.setLayoutManager(new CustomLinearLayoutManager(context,LinearLayoutManager.VERTICAL,false));
        myViewHolder.recycler_view_item_list.setAdapter(itemListAdapter);
        myViewHolder.recycler_view_item_list.setNestedScrollingEnabled(false);

        myViewHolder.can.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context, "Button More : "+myViewHolder.timee.getText()+"  --  "+myViewHolder.cost.getText(), Toast.LENGTH_SHORT).show();
            }
        });
    }
    @Override
    public int getItemCount() {
        return (dataList != null ? dataList.size() : 0);
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {

        TextView timee,cost;
        Button can;
        RecyclerView recycler_view_item_list;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            timee=itemView.findViewById(R.id.reorder_time);
            cost=itemView.findViewById(R.id.reorder_cost);
            can=itemView.findViewById(R.id.button);
            Log.d("JADOO", "onDataChange: VIEW HOLDER ");
            recycler_view_item_list=itemView.findViewById(R.id.schedulecart);
}}}

第二个适配器文件


    private Context context;
    private ItemData name123;
    public MyItemAdapter(Context context, ItemData Item_Name) {
        this.context = context;
        this.name123=Item_Name;
    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View itemView= LayoutInflater.from(context).inflate(R.layout.cart_list_layout,viewGroup,false);
        return new MyViewHolder(itemView);
    }
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
        Log.d("JADOO", "onBindViewHolder:  IN MY ITEM ADAPTER");
        ItemData itemData=new ItemData();
        myViewHolder.m_name.setText(itemData.getA_Item_name());
        myViewHolder.m_cost.setText(itemData.getC_Price());
        myViewHolder.m_quant.setText(itemData.getB_Quantity());
    }
    @Override
    public int getItemCount() {
        return 0;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        TextView m_name,m_quant,m_cost;
        IItemClickListener iItemClickListener;
        public void setiItemClickListener(IItemClickListener iItemClickListener){
            this.iItemClickListener=iItemClickListener;
        }
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            m_name=itemView.findViewById(R.id.tv_menu_name1);
            m_quant=itemView.findViewById(R.id.quantity);
            m_cost=itemView.findViewById(R.id.amount);
            itemView.setOnClickListener(this);
        }
        @Override
        public void onClick(View view) {
            iItemClickListener.onItemClickListener(view,getAdapterPosition());
        }}}

错误

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.food.pilo, PID: 28457
    java.lang.NullPointerException: Attempt to invoke virtual method 'void 安卓x.recyclerview.widget.RecyclerView.setAdapter(安卓x.recyclerview.widget.RecyclerView$Adapter)' on a null object reference
        at com.food.pilo.ScheduleOrder.onFirebaseLoadSuccess(ScheduleOrder.java:161)
        at com.food.pilo.ScheduleOrder$2.onDataChange(ScheduleOrder.java:143)
        at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@16.0.4:183)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.4:75)
        at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.4:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.4:55)
        at 安卓.os.Handler.handleCallback(Handler.java:873)
        at 安卓.os.Handler.dispatchMessage(Handler.java:99)
        at 安卓.os.Looper.loop(Looper.java:214)
        at 安卓.app.ActivityThread.main(ActivityThread.java:7156)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.安卓.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:975)```

共 (2) 个答案

  1. # 1 楼答案

    Your return value is 0 in Second adapter. Please add arraylist to second adapter.

    @Override
    public int getItemCount() {
        return 0;
    }
    
  2. # 2 楼答案

    我认为my_recycler_view=findViewById(R.id.my_recyclr_view);或者

    findViewById(R.id.schedulecart);返回空值请检查这些行