通知其他活动的片段

时间:2019-03-25 18:46:39

标签: java android android-fragments

在我的应用中,我使用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 {

    }

}

}

1 个答案:

答案 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中所述。

祝你好运!