如何识别哪个活动调用片段

Posted

技术标签:

【中文标题】如何识别哪个活动调用片段【英文标题】:How to recognize which activity call fragment 【发布时间】:2017-01-01 21:16:57 【问题描述】:

在我的应用中,我有一个带有地图的片段(Google Maps API v2),当用户未登录 - ActivityA 和用户登录 时使用它> - 活动 B。当用户未登录时,我添加了一些标记,当用户登录时,我从 JSON 中获取积分。如何识别哪个活动“调用”了片段?

片段

@Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) 
        mapView.onCreate(savedInstanceState);

        mapView.getMapAsync(new OnMapReadyCallback() 
            @Override
            public void onMapReady(GoogleMap mMap) 
                googleMap = mMap;

                //when the user is not log in
                for (int i = 0; i < result.size(); i++) 
                    MarkerOptions marker = new MarkerOptions().position(new LatLng(result.get(i).getLat(), result.get(i).getLng())).title(result.get(i).getTitle());
                    googleMap.addMarker(marker);
                

                //add here code when user is log in

                //show image of the point in dialog
                googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() 
                    @Override
                    public void onInfoWindowClick(Marker marker) 
                        Log.i("MARKER", marker.getPosition().toString());
                        showAlertDialog(marker);
                    
                );
            
        );
    

我的想法是输入一些布尔值,例如 userIsLogin,然后检查 true/false 并获取 List 取决于布尔值。 有没有更好的解决方案?

谢谢

【问题讨论】:

【参考方案1】:

if(getActivity() instanceof ActivityA) 做活动 if(getActivity() instanceof ActivityB) 做活动b的东西

【讨论】:

【参考方案2】:

如果您需要稳定和通用的解决方案,您可以编写实用程序类来确定片段中的 getActivity() 方法返回什么活动。这是一个例子:

public class ActivityRecognizer 
    public static final String MY_ACTIVITY = "my_activity";

    public String getActivityType(Activity activity) 
        if (activity == null) return NONE;
        else if (activity instanceof MyActivity) return MY_ACTIVITY;
    

然后您只需检查片段中所需的常量字符串。

【讨论】:

【参考方案3】:

您可以使用 getActivity() 方法从片段中获取活动。

【讨论】:

【参考方案4】:

您可以在片段中创建一个构造函数并从活动中传递一些布尔值。为了更好地传递消息,您可以创建接口并在活动中实现它。在fragment中提供接口实例(即activity),并使用接口实例从activity的fragment访问函数中获取其值。

【讨论】:

以上是关于如何识别哪个活动调用片段的主要内容,如果未能解决你的问题,请参考以下文章

如何从片段中调用 getSupportFragmentManager()?

如何从另一个活动中调用片段

如何从主要活动中调用片段方法

从活动中调用片段事件

如何从Android中没有活动和片段的函数调用DialogFragment?

如何从活动中调用片段方法?