RecyclerView.setAdapter (androidx.recyclerview.widget.RecyclerView Адаптер ADAPTER - PullRequest
0 голосов
/ 11 февраля 2020

Попробовано с использованием представления рециркулятора в представлении рециркулятора: первый адаптер работает нормально, но второй адаптер никогда не работает усталым, исправляя его снова и снова, ничего не работает .... help Второе представление рециркулятора получает данные из 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)```

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Возвращаемое значение равно 0 во втором адаптере. Пожалуйста добавьте arraylist ко второму адаптеру.

@Override
public int getItemCount() {
    return 0;
}
0 голосов
/ 11 февраля 2020

Я думаю my_recycler_view=findViewById(R.id.my_recyclr_view); или

findViewById(R.id.schedulecart); возвращая ноль, проверьте эти строки.

...