在我的应用中,我使用Fragments
来显示一些基于位置的数据。在我的MainActivity
中获取用户当前位置的信息,Fragment
使用这些坐标进行操作。我的问题是,如何让这两个类一起工作:在我现在使用时,Fragment
试图在MainActivity
打开后立即访问它,而无论是否该位置是否已经获取。我如何获取位置并随后通知Fragment
,以便它知道可以继续执行其代码并正确访问坐标?还是整个过程都被认为是错误的,并且这种问题的处理方式有所不同?
这是我的MainActivity
的想法:
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();
}
}
这是我的Fragment
的想法:
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 {
}
}
}
答案 0 :(得分:1)
您可以从“活动”中找到要访问的片段。
您可以在容器(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"))
要从片段访问活动,可以使用接口,如本answer中所述。
祝你好运!