리사이클보기의 상단에 최근 추가 된 데이터를 표시하는 방법

BlackCoder :

내가 데이터를 중포 기지에 저장하고 응용 프로그램을 작성하고 내 reclycler보기로 가져 오는 중 오류 및하지만 문제가있어, 나는 재활용 뷰의 상단에 가장 최근 추가 된 데이터를 표시합니다. 나는 최신 데이터를 얻기 위해 노력하고 내가 모든 가능한 솔루션이 아직도 내가지고 있지 않다했었다.

다음 코드를 참조하시기 바랍니다 ....

여기 내 Mainclass입니다 :

public class ShowDetails extends AppCompatActivity {

ProgressDialog progressDialog;
List<DataClass> list = new ArrayList<>();
RecyclerView recyclerView;
RecyclerView.Adapter adapter;

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

    recyclerView = findViewById(R.id.erecyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(ShowDetails.this));
    progressDialog = new ProgressDialog(ShowDetails.this);
    progressDialog.setMessage("Loading Data from Firebase Database");
    progressDialog.show();

    FirebaseOptions options = new FirebaseOptions.Builder()
            .setApplicationId("1:102738125513:android:3042292623f0448c") // Required for Analytics.
            .setApiKey("AIzaSyAZbWBpPzjAkrg23riK9kwk2T0tDf47dko") // Required for Auth.
            .setDatabaseUrl("https://citycare-fed31.firebaseio.com/") // Required for RTDB.
            .build();
    FirebaseApp.initializeApp(this);
            // Retrieve my other app.
            FirebaseApp app = FirebaseApp.getInstance("[DEFAULT]");
    // Get the database for the other app.
    FirebaseDatabase secondaryDatabase = FirebaseDatabase.getInstance(app);
    DatabaseReference data = secondaryDatabase.getInstance().getReference("Electricity");
    data.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (DataSnapshot ds : dataSnapshot.getChildren()) {

                for (DataSnapshot dSnapshot : ds.getChildren()) {

                    DataClass DataClass = dSnapshot.getValue(DataClass.class);

                    Log.d("Show", DataClass.getEname() == null ? "" : DataClass.getEname());
                    list.add(DataClass);

                }
                adapter = new ShowDetails.DataAdapter(ShowDetails.this, list);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
                progressDialog.dismiss();
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            progressDialog.dismiss();
        }
    });

}

이 내 어댑터 클래스입니다 :

 private class DataAdapter extends RecyclerView.Adapter<ShowDetails.DataAdapter.ViewHolder>  {

    Context context;
    List<DataClass> listData;

    public DataAdapter(Context context, List<DataClass> list) {

        this.context = context;
        this.listData = list;
    }

    @Override
    public ShowDetails.DataAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.show_items, parent, false);
        ShowDetails.DataAdapter.ViewHolder viewHolder = new ShowDetails.DataAdapter.ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ShowDetails.DataAdapter.ViewHolder holder, int position) {

        final DataClass AllDetails = listData.get(position);
        holder.NameTextView.setText(AllDetails.getEname());
        holder.EmailTextView.setText(AllDetails.getEemail());
        holder.DateTextView.setText(AllDetails.getEdate());
        holder.LocationTextView.setText(AllDetails.getElocation());
        holder.TypeTextView.setText(AllDetails.getEtype());
        Picasso.with(context).load(AllDetails.getImgurl()).resize(120, 60).into(holder.ImageTextView);

        holder.ImageTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(ShowDetails.this, ShowImage.class);
                i.putExtra("img", AllDetails.getImgurl());
                startActivity(i);
            }
        });
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(ShowDetails.this, Email_Activity.class);
                i.putExtra("txt", AllDetails.getEemail());
                startActivity(i);
            }
        });
    }

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

    class ViewHolder extends RecyclerView.ViewHolder {

        public TextView NameTextView;
        public TextView EmailTextView;
        public TextView DateTextView;
        public TextView LocationTextView;
        public TextView TypeTextView;
        public ImageView ImageTextView;
        public ViewHolder(View itemView) {

            super(itemView);
            NameTextView = itemView.findViewById(R.id.ShowNameTextView);
            EmailTextView = itemView.findViewById(R.id.ShowEmailTextView);
            DateTextView = itemView.findViewById(R.id.ShowDateTextView);
            LocationTextView = itemView.findViewById(R.id.ShowLocationTextView);
            TypeTextView = itemView.findViewById(R.id.ShowTypeTextView);
            ImageTextView = itemView.findViewById(R.id.ShowImageView);
        }
    }
}

여기 내 데이터베이스입니다

중포 기지 데이터 구조

여기에 루프에 대한 추가를 제거한 후 내 API 응답이다 API 응답

내가 프로그래밍에 새로운 오전 나를 도와주세요

Vahan Mambreyan :

당신은 루프에서 목록의 첫 번째 루프에서 반복자 및 이동는, setAdapter에 데이터를 추가 할 수 있습니다 :

for (DataSnapshot ds : dataSnapshot.getChildren()) {
   for (DataSnapshot dSnapshot : ds.getChildren()) {
      DataClass DataClass = dSnapshot.getValue(DataClass.class);
      list.add(0, DataClass);
   }
}
adapter = new ShowDetails.DataAdapter(ShowDetails.this, list);
recyclerView.setAdapter(adapter);
progressDialog.dismiss();

추천

출처http://10.200.1.11:23101/article/api/json?id=7894&siteId=1