保持新活动的内容视图

时间:2016-11-01 03:26:05

标签: android google-maps android-activity setcontentview slidingpanelayout

我有大量的代码,所以改变它的方式是不可取的。 话虽这么说,我需要让新活动了解屏幕上的内容。

似乎当我创建一个新活动时,在新的活动类中,我无法获得当前使用findViewById(..)的屏幕上的内容;

我有两个活动:MainActivity.Java和MapsActivity.java。在这个实例中,它们彼此同时运行。 我可以包含MapsActivity文件,因为它很简短。进一步的解释在评论中。

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  //  setContentView(R.layout.activity_maps); <--This will change the content view, which is not what I want as I already have the content view set before this activity is called. But, if I allow this to run, then the subsequent code works since it's "aware" of the contents on the screen.

//  Basically I need this activity to function as if I were to write
//   setContentView(layout); (but not actually write it)

Button backBtn = (Button) findViewById(R.id.backBTN); 
    backBtn.setBackgroundColor(Color.RED); //This causes a null error because it cannot find backBtn since backBtn is in my previous activity. (But backBtn is on the screen at the point when this activity runs)

    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this); //This is what I'm trying to make work, if I get the above functioning. This will work.
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    // Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}

}

在MainActivity.Java的某个时刻,我将屏幕内容更改为布局 - 的setContentView(布局)。然后我创建一个新的intent来启动MapsActivity.Java。

目标是让SlidingPaneLayout包含Google Map。我希望新的活动在SlidingPaneLayout中运行。我很接近,但由于我无法从当前屏幕上的视图中获取我的SupportMapFragment(或任何元素)(因为我的MainActivity中调用了setContentView),我无法使其工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

  

当我创建一个新活动时,在新的活动类中,我无法获得当前使用findViewById(..)的屏幕上的内容;

正确...但是,由于您似乎有extends FragmentActivity,这表示您正在使用碎片,因此您并不需要进行新的活动。

您只需extends SupportMapFragment即可定义Google地图片段的自定义实施。然后,您可以更新XML以使用该子类,并findFragmentById来获取它,或者您可以通过编程方式将该地图片段加载到MainActivity中,例如加载到某些FrameLayout中。 /> 无论哪种方式,因此允许您通过MainActivity类的getActivity()方法引用Fragment中的数据。

  

在MainActivity.Java中的某个时刻,我将屏幕内容更改为layout - setContentView(layout)。

setContentView中的初始onCreate之后,您真的不应该这样做。主要原因是您在开始时findViewById所做的所有观看都是无效的。解决方案 - 使用Fragments和FrameLayout来模拟setContentView方法。

//  Basically I need this activity to function as if I were to write
//   setContentView(layout); (but not actually write it)

当然,您可以实施abstract父活动加abstract int getLayoutResource()方法,并覆盖onCreate,以便始终致电setContentView(getLayoutResource())。尽管

,但你似乎太复杂了