При извлечении местоположения поста (Широта и Долгота) из Firebase извлекается правильное местоположение, и маркер помещается в правильное место только после остановки приложения и его повторного запуска. В противном случае, я узнаю местонахождение другого поста ...
Кто-нибудь может объяснить мне, почему это происходит? Поэтому, если я загружу новое сообщение, а затем попытаюсь открыть его местоположение, оно не вернет мне правильное местоположение, если я не остановлю приложение и снова войду в него. Если я делаю все из одного go, это дает мне местоположение другого сообщения.
Я думаю, что у меня проблема с моим Adapter
, потому что когда я поднимаю сообщение из моего ProfileFragment
он всегда возвращает мне правильное местоположение.
Я перевожу postid
из моего PostAdapter.java
класса в мой MapsActivityUser.class
с помощью Intent, поэтому правильный пост можно найти в Firebase. , Как я могу исправить эту проблему и, что более важно, почему это происходит?
PostAdapter. java
public class PostAdapter extends RecyclerView.Adapter<PostAdapter.ViewHolder> {
public Context mContext;
public List<Post> mPost;
public Post post;
public PostAdapter(Context mContext, List<Post> mPost) {
this.mContext = mContext;
this.mPost = mPost;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.post_item, parent, false);
return new PostAdapter.ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
post = mPost.get(position);
Glide.with(mContext).load(post.getPostimage())
.apply(new RequestOptions().placeholder(R.drawable.placeholderimg))
.into(holder.post_image);
if ("".equals(post.getText_location())) {
holder.text_location.setVisibility(View.GONE);
} else {
holder.text_location.setVisibility(View.VISIBLE);
holder.text_location.setText(post.getText_location());
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView text_location;
public ViewHolder(@NonNull View itemView) {
super(itemView);
text_location = itemView.findViewById(R.id.text_location);
text_location.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, MapsActivityUser.class);
intent.putExtra("postid", post.getPostid());
mContext.startActivity(intent);
}
});
}
}
}
MapsActivityUser. java
public class MapsActivityUser extends FragmentActivity implements OnMapReadyCallback {
String postid;
private GoogleMap map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps_user);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
postid = getIntent().getStringExtra("postid");
}
@Override
public void onMapReady(GoogleMap googleMap) {
map = googleMap;
final DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts").child(postid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Post post = dataSnapshot.getValue(Post.class);
if (post != null) {
double latitude = post.getLocation().getLatitude();
double longitude = post.getLocation().getLongitude();
LatLng location = new LatLng(latitude, longitude);
map.addMarker(new MarkerOptions().position(location).title("Event location"));
map.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 10));
} else {
Toast.makeText(MapsActivityUser.this, "Event doesn't have location on map", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
MapsActivityuser. java обновлен код с RecyclerView
public class MapsActivityUser extends FragmentActivity implements OnMapReadyCallback {
String postid;
private GoogleMap map;
private RecyclerView mRecyclerView;
private PostAdapter mPostAdapter;
private List<Post> mPostList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps_user);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
postid = getIntent().getStringExtra("postid");
mRecyclerView = findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(linearLayoutManager);
mPostList = new ArrayList<>();
mPostAdapter = new PostAdapter(this, mPostList, postid);
mRecyclerView.setAdapter(mPostAdapter);
}
@Override
public void onMapReady(GoogleMap googleMap) {
map = googleMap;
final DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts").child(postid).child("location");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
double latitude = dataSnapshot.child("latitude").getValue(Double.class);
double longitude = dataSnapshot.child("longitude").getValue(Double.class);
LatLng location = new LatLng(latitude, longitude);
map.addMarker(new MarkerOptions().position(location).title("Event location"));
map.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 10));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void onPostClick(int position) {
//
}
}