2017-01-21 20 views
0

這是我的是將數據發送到活動第一片段的代碼,它是工作:從Activity向具有該Activity的片段發送數據時接收空值?

autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { 
     @Override 
     public void onPlaceSelected(Place place) { 
      Log.i(TAG,"Place:"+place.getLatLng()); 
      LatLng latLng = place.getLatLng(); 
      double latitude = latLng.latitude; 
      double longitude = latLng.longitude; 
      Intent intent= new Intent(getApplicationContext(),Activity_home.class); 
      intent.putExtra("latitude",latitude); 
      intent.putExtra("longitude",longitude); 
      startActivity(intent); 
     } 

     @Override 
     public void onError(Status status) { 
      Log.i(TAG,"An error occured:" + status); 
     } 
    }); 

這裏是接收來自片段的數據,然後在其內將其發送到第二片段中的活動:

public class Activity_home extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{ 

    Toolbar toolbar; 
    FloatingActionButton floatingActionButton; 
    DrawerLayout drawerLayout; 
    NavigationView navigationView; 

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



     toolbar = (Toolbar)findViewById(R.id.toolbar); 
     //floatingActionButton= (FloatingActionButton)findViewById(R.id.fab); 
     navigationView = (NavigationView)findViewById(R.id.nav_view); 
     drawerLayout = (DrawerLayout)findViewById(R.id.drawerLayout); 

     setSupportActionBar(toolbar); 
     getSupportActionBar().setTitle("My Test App"); 


     /***************HEADER LAYOUT contents*****************/ 

     View nav_view = navigationView.getHeaderView(0); 

     ImageView profile_img = (ImageView)nav_view.findViewById(R.id.imgProfile_drawer); 
     TextView title = (TextView)nav_view.findViewById(R.id.textView_navHeader_name); 
     TextView email = (TextView)nav_view.findViewById(R.id.textView_navHeader_email); 

     profile_img.setImageResource(R.drawable.ic_profile_reg); 
     title.setText("Moin Hashmi"); 
     email.setText("[email protected]"); 

     /***************NAVIGATION DRAWER**********************/ 

     /* floatingActionButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Snackbar.make(v, "Snackbar", Snackbar.LENGTH_LONG).show(); 
      } 
     });*/ 

     ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.navigation_open,R.string.navigation_close); 
     drawerLayout.addDrawerListener(drawerToggle); 
     drawerToggle.syncState(); 

     navigationView.setNavigationItemSelectedListener(this); 
     //Double lonlat = (getIntent().getDoubleExtra("place",0)); 
     if (getIntent().getExtras() != null){ 
      double latitude = getIntent().getDoubleExtra("latitude",0.00); 
      double longitude = getIntent().getDoubleExtra("longitude",0.00); 
      Bundle bundle=new Bundle(); 

      bundle.putDouble("lat",latitude); 
      bundle.putDouble("lon",longitude); 
    //   bundle.putString("latitude", latitude+""); 
    //   bundle.putString("longitude", longitude+""); 


      Fragment fragment = new Map(); 
      fragment.setArguments(bundle); 
      navigationView.getMenu().getItem(0).setChecked(true); 
      FragmentManager fm = getSupportFragmentManager(); 
      fm.beginTransaction().replace(R.id.content_home,fragment).commit(); 
     } 

這裏是從父活動接收數據的片段代碼:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    if(getArguments()!=null) { 
     longitude = this.getArguments().getDouble("lon"); 
     latitude = this.getArguments().getDouble("lat"); 
    } 
    View view = inflater.inflate(R.layout.fragment_map, container, false); 


    SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.gmaps); 
    mapFragment.getMapAsync(this); 

    btn_bookNow=(Button)view.findViewById(R.id.btn_Booknow); 
    btn_schedule=(Button)view.findViewById(R.id.btn_scheduleLater); 

    btn_bookNow.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

//    Toast.makeText(getActivity(),"clicked",Toast.LENGTH_SHORT).show(); 
      Intent intent = new Intent(getActivity(), MapSearch.class); 
      startActivity(intent); 
     } 
    }); 

    return view; 
} 

回答

1

您需要使用相同的密鑰名稱的t兩個地方或者是「lat」&「lon」「緯度」&「經度」

這是你擁有的一切:

bundle.putDouble("lat",latitude); 
bundle.putDouble("lon",longitude); 

再次檢查

if(getArguments()!=null) { 
    longitude = this.getArguments().getDouble("longitude"); 
    latitude = this.getArguments().getDouble("latitude"); 
} 

我也建議不要把一個MapFragment另一個片段中,但這是另外一個問題

+0

我做檢查但設置調試器模式時,它顯示getArgument()具有空值。這意味着如果條件變得錯誤。我不知道爲什麼 –

+0

你調用了setArguments,所以不應該爲null。您從丟失的鍵獲得的值爲空 –

相關問題