我有大量的代码,所以改变它的方式是不可取的。 话虽这么说,我需要让新活动了解屏幕上的内容。
似乎当我创建一个新活动时,在新的活动类中,我无法获得当前使用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),我无法使其工作。
有什么想法吗?
答案 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())
。尽管