Отображение расстояния между мной и другими пользователями и отображение в Recyclerview из firebase - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь отобразить местоположение других пользователей от моей позиции до них (например, от 1 до 1 балла).Проблема в том, что я не знаю, как отобразить из базы данных в реальном времени Firebase в Rickler.Я хочу показать что-то вроде этого:

sample recyclerview sketch that I want to show Я уже начал код:

public class DriverMain extends AppCompatActivity{
    private BottomNavigationView bottomNavigationView;

    private RecyclerView notifRecyclerView;
    private List<NotifData> result;

    private FirebaseDatabase database;
    private DatabaseReference passengerRequest;
    private FirebaseRecyclerAdapter<NotifData,NotifAdapter> adapter;

    private LatLng currentLocation;
    private Location mLastLocation;
    private LatLng pickupLocation;

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

        BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.nav_bottom_driver);
        DriverMapActivity.BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
        Menu menu = bottomNavigationView.getMenu();
        MenuItem menuItem = menu.getItem(1);
        menuItem.setChecked(true);

        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.bottom_map:
                        startActivity(new Intent(DriverMain.this, DriverMapActivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));
                        break;
                    case R.id.bottom_notif:
                        startActivity(new Intent(DriverMain.this, DriverMain.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));
                        break;
                    case R.id.bottom_profile:
                        startActivity(new Intent(DriverMain.this, DriverProfileActivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));
                        break;
                }
                return true;
            }
        });

        //----! RecyclerView !----//

        result = new ArrayList<>();

        notifRecyclerView = (RecyclerView) findViewById(R.id.notifRecycler);
        notifRecyclerView.setHasFixedSize(true);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);

        notifRecyclerView.setLayoutManager(linearLayoutManager);

        //------!Database!------//
        database = FirebaseDatabase.getInstance();
        String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
        passengerRequest = database.getReference().child("Users").child("Driver").child(userId).child("passengerRequest");

        getList();
    }

    private void getList() {
        Query query = passengerRequest
                .orderByChild("destination")
                .limitToLast(50);

        FirebaseRecyclerOptions<NotifData> options =
                new FirebaseRecyclerOptions.Builder<NotifData>()
                        .setQuery(query, NotifData.class)
                        .build();

        adapter = new FirebaseRecyclerAdapter<NotifData,NotifAdapter>(options) {
            @Override
            protected void onBindViewHolder(@NonNull NotifAdapter holder, int position, @NonNull NotifData model) {
                holder.notifDestination.setText(model.getNotifDestinationData());
            }

            @NonNull
            @Override
            public NotifAdapter onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.item_request,parent,false);
                return new NotifAdapter(view);
            }
        };
        notifRecyclerView.setAdapter(adapter);
        adapter.startListening();
    }
}
...