Как сохранить прокручиваемую позицию Recyclerview при обратной печати из другого действия, и я получаю данные из базы данных Firebase в реальном времени? - PullRequest
1 голос
/ 07 февраля 2020

Я использую фрагменты внутри этого я выбираю данные из базы данных Firebase. Я использую представление карты для отображения данных, щелкая каждое представление карты, которое я достигаю для нового действия, но когда я нажимаю кнопку «Назад», загрузчик повторного просмотра загружается снова, и страница просмотра повторного запуска начинается сверху. Я хочу сохранить позицию просмотра рециркулятора. Пожалуйста, помогите, как сохранить позицию просмотра прокрутки.

public class StationaryDetailFragment extends Fragment {

private RecyclerView pendingOrder_row;
private DatabaseReference orderDatabase;
FirebaseRecyclerAdapter orderRecyclerAdapter;
private DatabaseReference databaseReference;
private String rollnumber , mobilenumber, collegename, hostelname, key;
private ArrayList<String> title2 = new ArrayList<>();

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View v = inflater.inflate(R.layout.fragment_stationarydetail, container, false);
    pendingOrder_row = v.findViewById(R.id.pendingOrder_row);
    pendingOrder_row.setHasFixedSize(true);
    pendingOrder_row.setLayoutManager(new LinearLayoutManager(getContext()));
    orderDatabase = FirebaseDatabase.getInstance().getReference().child("StationaryConfirmOrder");

        orderDatabase.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            key= dataSnapshot.getKey();
            title2.add(key);
            Log.i("key",key);

        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

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

        }
    });

    return v;
}
@Override
public void onStart() {
    super.onStart();
    FirebaseRecyclerOptions<details> optioner =
            new FirebaseRecyclerOptions.Builder<details>()
                    .setQuery(orderDatabase, details.class)
                    .setLifecycleOwner(this)
                    .build();
    orderRecyclerAdapter = new FirebaseRecyclerAdapter<details, orderViewHolder>(optioner){

        @NonNull
        @Override
        public orderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            return new orderViewHolder(LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.stat_order_cnfrow, parent, false));
        }

        @Override
        protected void onBindViewHolder(@NonNull final orderViewHolder holder, int position, @NonNull details model) {
            final String userid = model.getUserid();
            final String price = model.getPrice();
            final String Quantity = model.getQuantity();
            final String Name = model.getName();
            final String key2 = title2.get(position);
            holder.setUserId(key2);

            databaseReference = FirebaseDatabase.getInstance().getReference("User").child(userid);
            databaseReference.keepSynced(true);
            databaseReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    rollnumber = dataSnapshot.child("rollNumber").getValue().toString();
                    mobilenumber = dataSnapshot.child("mobileNumber").getValue().toString();
                    collegename = dataSnapshot.child("collegeName").getValue().toString();
                    hostelname = dataSnapshot.child("hostelName").getValue().toString();
                    Log.i("user", rollnumber+"/"+ mobilenumber+"/"+collegename+"/"+hostelname);
                    holder.setName(rollnumber);
                    holder.setPrice(hostelname +", "+ collegename);


                }

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

                }
            });


            holder.orderCard.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    final Intent orderDetail = new Intent(getActivity(),stat_con_order.class);
                    orderDetail.putExtra("userid",userid);
                    orderDetail.putExtra("price",price);
                    orderDetail.putExtra("Quantity",Quantity);
                    orderDetail.putExtra("Name",Name);
                    orderDetail.putExtra("orderid",key2);
                    startActivity(orderDetail);


                }
            });




        }
        @Override
        public int getItemCount() {
            return title2.size();
        }
    };
    pendingOrder_row.setAdapter(orderRecyclerAdapter);
    orderRecyclerAdapter.notifyDataSetChanged();
    pendingOrder_row.smoothScrollToPosition(0);


}

public static class orderViewHolder extends RecyclerView.ViewHolder {
    View view;
    RelativeLayout orderCard;
    public orderViewHolder(@NonNull View itemView) {
        super(itemView);
        view =itemView;
        orderCard = itemView.findViewById(R.id.orderCard);


    }
    public void setName(String Name){
        TextView rollTextView = (TextView) view.findViewById(R.id.rollTextView);
        rollTextView.setText(Name);
    }
    public void setPrice(String Price){
        TextView mobileTextView = (TextView) view.findViewById(R.id.mobileTextView);
        mobileTextView.setText(Price);
    }
    public void setUserId(String userId){
        TextView orderidTextView = (TextView) view.findViewById(R.id.orderidTextView);
        orderidTextView.setText(userId);
    }
}

}

1 Ответ

0 голосов
/ 07 февраля 2020

Ваш onStart имеет реализацию для инициализации Recycler, Adapter и: Collection DATA!

Так что, если ваш Фрагмент теряет видимость, когда другое действие находится в полноэкранном режиме, и вы возвращаетесь к скрытому фрагменту, Вы выполняете запрос, получаете данные и устанавливаете Recycler, но это новая коллекция, поэтому Recycler занимает первое положение.

Вам необходимо сохранить свою коллекцию в onSaveInstanceState и восстановить ее в onActivityCreated () и установите его в Adapter.

При таком подходе вы должны значительно изменить реализацию фрагмента, потому что вы не рассматриваете жизненный цикл!

...