【问题标题】:RecyclerView.setAdapter(androidx.recyclerview.widget.RecyclerView Adapter ADAPTERRecyclerView.setAdapter(androidx.recyclerview.widget.RecyclerView 适配器适配器
【发布时间】:2020-02-11 09:27:41
【问题描述】:

尝试在回收器视图中使用回收器视图,第一个适配器工作正常,但第二个适配器从未运行 累了一遍又一遍地修复它没有任何效果....帮助 第二个回收器视图正在从 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 androidx.recyclerview.widget.RecyclerView.setAdapter(androidx.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 android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7156)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)```

【问题讨论】:

  • 您的 R.layout.activity_schedule_order 不包含任何 ID 为 R.id.schedulecartRecyclerView。请检查
  • 好的,我试过了,但现在我在回收站视图中没有收到任何数据,即使我在 mya ItemData 类中有数据

标签: java android android-studio android-recyclerview


【解决方案1】:

您在第二个适配器中的返回值为 0。请将 arraylist 添加到第二个适配器。

@Override
public int getItemCount() {
    return 0;
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 抱歉,my_recycler_view 工作正常..当我尝试为第二个 recylerview myrecycler1 设置适配器时出现错误
    • @Sahil 然后预先调试 findViewById(R.id.schedulecart);这条线正在返回。希望为空。
    • 我稍微修复了它,但现在它实际上返回了数据,但它没有被分配给回收站视图。
    猜你喜欢
    • 2011-01-05
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多