2017-05-08 70 views
2

如何从主要活动访问片段?我想添加标记片段类与从recycledview的位置。具有位置数据的对象位于ClubBean中。我通过接口ClubAdapter.OnClubClickListener获得该:在其他片段的Google地图上添加标记

 @Override 
     public void onClicked (ClubBean club) { 
      ClubBean bean = club; 
      Log.d("Name: ", bean.getClubName()); 
     } 

主要活动:

public class MapsActivity extends FragmentActivity implements LoadAllClubsInterface, ClubAdapter.OnClubClickListener { 

     private DrawerLayout drawerLayout; 

     private RecyclerView clubRecycler; 
     private RecyclerView.LayoutManager clubLayoutManager; 
     private ArrayList<ClubBean> clubList = new ArrayList<ClubBean>(); 

     private RecyclerView.Adapter clubAdapter; 

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

      FragmentManager fm = getSupportFragmentManager(); 
      fm.beginTransaction().replace(R.id.content_frame, new MyMapFragment()).commit(); 

      new LoadAllClubs(this).execute(); //load list in background from database 

      drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

      clubRecycler = (RecyclerView) findViewById(R.id.recycler_view); 
      clubRecycler.setHasFixedSize(true); 
      clubLayoutManager = new LinearLayoutManager(this); 

      clubRecycler.setLayoutManager(clubLayoutManager); 

     } 

     @Override 
     public void finishDataLoad(ArrayList<HashMap<String, String>> clubs) { 
      Iterator<HashMap<String, String>> iterator = clubs.iterator(); 
      Map<String, String> map = new HashMap<String, String>(); 
      while (iterator.hasNext()){ 
       map = iterator.next(); 
       clubList.add(new ClubBean(map.get("name"),map.get("localization"), map.get("score"))); 
      } 
      //pass the class that implements your listener as a parameter. 
      clubAdapter = new ClubAdapter(clubList, this, this); 
      clubRecycler.setAdapter(clubAdapter); 
     } 

    @Override 
     public void onClicked (ClubBean club) { 
      ClubBean bean = club; 
      Log.d("Name: ", bean.getClubName()); 
     } 

    } 

我MapFragment类别:

public class MyMapFragment extends Fragment implements OnMapReadyCallback{ 

    GoogleMap mGoogleMap; 
    MapView mMapView; 
    View mView; 

    public MyMapFragment(){ 

    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     mView = inflater.inflate(R.layout.map_fragment, container, false); 

     return mView; 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     mMapView = (MapView) mView.findViewById(R.id.map); 
     if (mMapView != null){ 
      mMapView.onCreate(null); 
      mMapView.onResume(); 
      mMapView.getMapAsync(this); 
     } 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     MapsInitializer.initialize(getActivity().getApplicationContext()); 
     mGoogleMap = googleMap; 

     LatLng triCity = new LatLng(54.4158773,18.6337789); 
     mGoogleMap.addMarker(new MarkerOptions().position(triCity).title("Trojmiasto")); 
     mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(triCity, 11)); 
    } 


} 

回答

0

你可以做这样的事情

 public class MapsActivity extends FragmentActivity implements LoadAllClubsInterface, ClubAdapter.OnClubClickListener { 

      MyMapFragment mMyFragment; 

     @Override 
       protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_maps); 
        mMyFragment=new MyMapFragment(); 
        FragmentManager fm = getSupportFragmentManager(); 
        fm.beginTransaction().replace(R.id.content_frame,mMyFragment).commit(); 
     } 

private void addMarkers(){ 
    //defined this method in Mapfragment 
    mMyFragment.addMarkers(); 
    } 
1

通信的便捷方式活动之间和片段是通过接口。这里是根据你的问题的示例代码:

步骤1:定义一个这样的接口:

public interface IFragmentController{ 
      void passDataToFragmentMethod(String someStringValue); 
    } 

步骤2:实现该接口到您的片段。然后你会在你的片段中得到passDataToFragmentMethod(String someStringValue)方法。

public class MyMapFragment extends Fragment implements IFragmentController{ 


@Override 
void passDataToFragmentMethod(String someStringValue){ 
    // So your logic code here using passed value 
} 


} 

步骤3:您的活动只是让你片段的实例并调用passDataToFragmentMethod方法是这样的:

Fragment mapFragment=new MyMapFragment(); 

@Override 
public void onClicked (ClubBean club) { 
ClubBean bean = club; 
Log.d("Name: ", bean.getClubName()); 
mapFragment.passDataToFragmentMethod(bean.getClubName()); 
} 

希望这将帮助你解决你的问题:)

0

如果你有名单然后

For(ClubBean obj:ClubList) 
{ 

// latitude and longitude 
double latitude =obj.getLatValue(); 
double longitude = obj.getLngValue(); 

// create marker 
MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Hello Maps "); 

// adding marker 
googleMap.addMarker(marker); 
}