单击按钮后删除标记-它删除所需的内容

时间:2020-04-30 22:01:56

标签: javascript reactjs mapbox

我想在单击后删除标记,我在弹出窗口中创建了一个按钮,但是单击此按钮后,弹出窗口本身将被删除,标记仍然保留,有人可以帮助我解决此问题吗?

public class Main5Activity extends AppCompatActivity {
    Button btnAllow, btnProhibit;
    private String Dvisitor;
    private String Dmobile;
    private String Dflat;

    DatabaseReference reff;
    ImageView img;

    private DatabaseReference Post;



    static TextView textView;
    String roadies;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main5);
        btnAllow = (Button) findViewById(R.id.button);
        btnProhibit = (Button) findViewById(R.id.button2);
        textView = (TextView) findViewById(R.id.textView5);
        img = (ImageView) findViewById(R.id.imageView3);

        imageshow();


        init();
        readonetime();









    }

    private void readonetime() {
        Query query = Post.orderByKey().limitToLast(1);

        query.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for(DataSnapshot child: dataSnapshot.getChildren()) {
                    String post = dataSnapshot.child("visitor").getValue(String.class);
                    String post1 = dataSnapshot.child("mobile").getValue(String.class);
                    String post2 = dataSnapshot.child("flat").getValue(String.class);
                    textView.setText("Mr. "+post+"with mobile number: " + post1+"wants to visit your flat: " + post2);
                }

            }

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

            }
        });
    }

    private void init() {
        Post = FirebaseDatabase.getInstance().getReference().child("Image");
    }


    private void imageshow() {
        reff = FirebaseDatabase.getInstance().getReference().child("Image");
        reff.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                Picasso.get().load(Main4Activity.URL).fit().into(img);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(Main5Activity.this, "OoooooLalalala", Toast.LENGTH_SHORT).show();
            }
        });


        btnAllow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Main5Activity.this, Main8Activity.class);
                startActivity(intent);
            }
        });

        btnProhibit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Main5Activity.this, Main9Activity.class);
                startActivity(intent);
            }
        });
    }


}

1 个答案:

答案 0 :(得分:0)

您通过Popup#setHTML添加的<button>Popup元素本身的子元素,因此单击按钮并使用event.target.parentNode将引用{{1 }}本身,而不是Marker。尽管使用Marker#setPopup将弹出窗口与所述标记链接,但是此方法不会使popup元素成为marker元素的子元素。例如,在单击标记以显示附加的弹出窗口后,检查本示例中页面的HTML,可以观察到这一点:

Popup

如您所见,标记和弹出窗口是单独的DOM节点。

源代码here<div id="marker" class="mapboxgl-marker mapboxgl-marker-anchor-center" tabindex="0" ... ></div> <div class="mapboxgl-popup mapboxgl-popup-anchor-bottom" ... > ... </div> 的实现指示该方法从标记创建了对相关弹出窗口的引用,但是您可以在popup.js的实现中看到{{3} },弹出窗口没有引用标记实例。

要获得所需的效果,可以通过设置自定义类或ID,然后在单击其弹出窗口时删除具有相关ID的标记,来在标记与其弹出窗口之间创建双向链接。您可以在初始化Marker#setPopup时使用可选的options.element,以创建附加到标记的DOM元素的唯一ID,然后将该相同的ID与Marker结合使用,以将标记引用为单击弹出窗口中的按钮时删除。