【问题标题】:Click a marker on the map and direct a position inside in RecycleView单击地图上的标记并在 RecyclerView 中指定位置
【发布时间】:2018-01-18 01:27:57
【问题描述】:

我希望通过单击地图上的标记,它会将我引导到 RecycleView 中的某个位置。 我已经在地图上有了标记,每个标记都有一个从 Firebase 检索到的名称,并作为标题放置在 MarkerOptions 中。 单击打开了“alpha”标题的书签并显示在 RecycleView 中也有“alpha”标题的位置需要什么?

代码回收视图:

public class ShowImagesActivity extends AppCompatActivity {
    //recyclerview object
    private RecyclerView recyclerView;

    //adapter object
    private RecyclerView.Adapter adapter;

    //database reference
    private DatabaseReference mDatabase;

    //progress dialog
    private ProgressDialog progressDialog;

    //list to hold all the uploaded images
    private List<Upload> uploads;

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


        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));


        progressDialog = new ProgressDialog(this);

        uploads = new ArrayList<>();

        //displaying progress dialog while fetching images
        progressDialog.setMessage("Please wait...");
        progressDialog.show();
        mDatabase = FirebaseDatabase.getInstance().getReference(Constants.DATABASE_PATH_UPLOADS);

        //adding an event listener to fetch values
        mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                //dismissing the progress dialog
                progressDialog.dismiss();

                //iterating through all the values in database
                for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                    Upload upload = postSnapshot.getValue(Upload.class);
                    uploads.add(upload);
                }
                //creating adapter
                adapter = new MyAdapter(getApplicationContext(), uploads);

                //adding adapter to recyclerview
                recyclerView.setAdapter(adapter);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                progressDialog.dismiss();
            }
        });

    }
}

代码上传.class:

public class Upload{

    public String name;
    public String description;
    public String local;
    public String url;
    public String latitude;
    public String longitude;

    // Default constructor required for calls to
    // DataSnapshot.getValue(User.class)
    public Upload() {
    }

    public Upload(String name, String description,String local,String latitude, String longitude, String url) {
        this.name = name;
        this.description = description;
        this.local = local;
        this.url= url;
        this.latitude = latitude;
        this.longitude= longitude;
    }

    public String getName() {
        return name;
    }
    public String getDescription() {
        return description;
    }
    public String getLocal() {
        return local;
    }
    public String getLongitude() {
        return longitude;
    }
    public String getLatitude() {
        return latitude;
    }

    public String getUrl() {
        return url;
    }
}

代码图:

ref.child("uploads").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                Iterator<DataSnapshot> dataSnapshotsChat =  dataSnapshot.getChildren().iterator();

                while (dataSnapshotsChat.hasNext()) {
                    DataSnapshot dataSnapshotChild = dataSnapshotsChat.next();
                    String latitudeL = dataSnapshotChild.child("latitude").getValue().toString();
                    String longitudeL = dataSnapshotChild.child("longitude").getValue().toString();
                    double latitude1 = Double.parseDouble((latitudeL));
                    double longitude1 = Double.parseDouble(longitudeL);
                    LatLng local = new LatLng(latitude1, longitude1);
                    final String title = dataSnapshotChild.child("name").getValue().toString();
                    final String url = dataSnapshotChild.child("url").getValue().toString();

                    mMap.addMarker(new MarkerOptions().position(local).title(title));
                    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(local, 10));

                    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
                    @Override
                    public boolean onMarkerClick(Marker marker) {

                              //What I put here??
    }}}

【问题讨论】:

    标签: android google-maps firebase android-recyclerview


    【解决方案1】:

    您可以使用Google Place picker,这是实现“地点选择器”的更好方法,但请记住,根据他们的许可,您只能保存地点的 id,而不是 lat 或 lon 或其他东西。另外,在使用 Gmaps 或 Places Api 时,您必须输入“made by Google logo”。

    【讨论】:

    • 另一种选择?
    【解决方案2】:

    相应地修改代码

    1. 在此之前,您必须在 Arraylist 中获取相应标记的 上传模型类对象位置

    2. 通过 ShowImagesActivity 活动中的意图和句柄传递对象位置。

    3. 使用recyclerview.getLayoutManager().scrollToPosition(youPositionInTheAdapter).

      mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { intent = new Intent(this, ShowImagesActivity.class); intent.putExtra(ITEM_POSITION, Adapterposition); } }

    【讨论】:

    • 我更新了上面的代码,我需要知道如何获取上传模型类对象的位置
    • 如果在 MapActivity 和 ShowImagesActivity 中维护相同的一组数据 List,则可以获取您正在单击的标记的对象位置,从而可以通过 Intent 将该位置传递给下一个 Activity。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2018-03-13
    相关资源
    最近更新 更多