Java 通知来自其他活动的片段

Java 通知来自其他活动的片段,java,android,android-fragments,Java,Android,Android Fragments,在我的应用程序中,我使用片段来显示一些基于位置的数据。在myMainActivity中获取用户当前位置的信息,Fragment使用这些坐标继续。我的问题是,我如何让这两个类一起工作:在我现在使用它时,片段会在打开MainActivity时尝试访问该位置数据,而不管该位置是否已经获取。我如何获取位置并在之后通知片段,以便它知道可以继续使用代码并正确访问坐标?还是整个程序都被认为是错误的,而这类问题的处理方式有所不同 这就是我的main活动的想法: public class MainActivity

在我的应用程序中,我使用
片段
来显示一些基于位置的数据。在my
MainActivity
中获取用户当前位置的信息,
Fragment
使用这些坐标继续。我的问题是,我如何让这两个类一起工作:在我现在使用它时,
片段
会在打开
MainActivity
时尝试访问该位置数据,而不管该位置是否已经获取。我如何获取位置并在之后通知
片段
,以便它知道可以继续使用代码并正确访问坐标?还是整个程序都被认为是错误的,而这类问题的处理方式有所不同

这就是我的
main活动的想法:

public class MainActivity extends AppCompatActivity {

public static Double lat;
public static Double lon;

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

    showLocation();

}

private void showLocation() {
//Grab Location
    if (location != null) {
        lat = location.getLatitude();
        lon = location.getLongitude();
    }

}
这就是我的
片段的想法:

public class FragmentA extends Fragment {

public FragmentA() {
    // Required empty public constructor
}

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

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


    return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

}

public void start(){
    if (MainActivity.lat != null && MainActivity.lon != null) {
        lat = MainActivity.lat;
        lon = MainActivity.lon;

        //proceed with location data
    } else {

    }

}

}

您可以从活动中找到要访问的片段

您可以在充气的容器(xml)中查找它:

((FragmentA) getSupportFragmentManager().findFragmentById(R.id.yourContainer))

您可以通过加载时指定的标记在堆栈中搜索片段:

// First load your fragment
getSupportFragmentManager().beginTransaction()
  .replace(R.id.yourContainer, fragment, "yourFragmentTag")
  .addToBackStack(null)
  .commit()

// Then you can access it
((FragmentA) getSupportFragmentManager().findFragmentByTag("yourFragmentTag"))
要从片段访问活动,可以使用接口,如本文所述


祝你好运

您可以在此处尝试从ViewModels查看LiveData:。我还发现媒体上的这个例子非常有助于在一个应用程序示例中理解它:到目前为止,谢谢你,但是如果我使用的是ViewPager,你还有什么建议吗?它非常类似。从片段中,您仍将拥有活动的有效实例,因此您将能够通过接口与它通信,正如我上面告诉您的。另一方面,在ViewPager中,可以覆盖FragmentPagerAdapter的getItem()方法,以便它返回当前片段。