2017-10-19 39 views
0

我正在開發Android Studio的應用程序,其中使用Firebase,我使用地圖顯示不同的內容。用戶第一次進入MapsActivity時,警告對話框會彈出一些信息。我的問題是當按下「確定」按鈕時,應用程序會自動複製活動並運行「新」活動。當我按下後退按鈕時,我可以再次回到「原始」活動。我不明白它爲什麼這樣做。任何想法爲什麼?Android - alertdialog後的地圖重複

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 
private GoogleMap mMap; 

DatabaseReference database; 
DatabaseReference userRef; 

FirebaseUser user; 
String userId; 
String username; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    user = FirebaseAuth.getInstance().getCurrentUser(); 
    userId = user.getUid(); 
    username = user.getDisplayName(); 
    database = FirebaseDatabase.getInstance().getReference(); 

    final SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 
} 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 
    userRef = database.child("User").child(userId); 

    userRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (!dataSnapshot.hasChild("dialog")){ 
       AlertDialog.Builder dialog = new AlertDialog.Builder(MapsActivity.this); 
       dialog.setTitle("hi"); 
       dialog.setMessage("Some text"); 
       dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int id) { 

         userRef.child("dialog").setValue(true); 
        } 
       }); 
       dialog.show(); 
      } 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }); 
} 

}

+0

使用viewCreated並顯示對話框裏面。 –

+0

我沒有使用片段,所以我不能使用onviewCreated – JDoe

+0

mapFragment.getMapAsync(this);在此方法之後運行addValueEventListener()。 –

回答

1

時一定要小心使用addValueEventListener在火力

如果代碼被稱爲兩次。在它的功能將執行兩次!

,所以如果你想要這個信息只是一次,不要有跟蹤節點

可以使用addListenerForSingleValueEvent

在你的代碼,當您單擊確定修改節點,您軌道,

您的活動重複

+0

我改變了我的代碼,所以我使用addListenerForSingleValueEvent,但這沒有幫助。在Android監視器中,我可以看到它在單擊「確定」時再次創建活動 – JDoe

+0

但您說得對。當我刪除Firebase代碼並僅運行alertdialog代碼時,它不會重複。所以它必須是與火力點代碼 – JDoe

+0

你可以編寫代碼,打開這個活動 ,你可以接受我的答案,如果它解決你的問題 – Elsunhoty

0
AlertDialog.Builder dialog = new AlertDialog.Builder(MapsActivity.this); 
       dialog.setTitle("hi"); 
       dialog.setMessage("Some text"); 
       dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int id) { 

         final SupportMapFragment mapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map); 
         mapFragment.getMapAsync(this); 
        } 
       }); 
       dialog.show(); 
+0

不能使用「this」關鍵字 – JDoe

+0

而不是使用MapsActivity.this。 – SAM

+0

好的,試過了。它不起作用,仍然是一樣的 – JDoe