-1

많은 양의 코드가 있으므로 완료 방법을 변경하는 것은 바람직하지 않습니다. 그렇다면 새로운 활동을 통해 화면의 내용을 인식해야 할 필요가 있습니다.새로운 활동의 콘텐츠보기 유지

새로운 활동 클래스를 만들 때 현재 findViewById (..)를 사용하는 화면에 있어야하는 것을 얻을 수없는 것 같습니다.

MainActivity.Java와 MapsActivity.java의 두 가지 활동이 있습니다. 이 인스턴스는 서로 동시에 실행됩니다. 지도 액티비티 파일을 짧게 포함 할 수 있습니다. 자세한 설명은 주석에 있습니다.

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 (레이아웃). 그런 다음 MapsActivity.Java를 시작하는 새로운 의도를 만듭니다.

목표는 Google지도가있는 SlidingPaneLayout을 가지는 것입니다. 새로운 액티비티를 SlidingPaneLayout 내부에서 실행하고 싶습니다. 가까운,하지만 내 SupportMapFragment (또는 모든 요소) 현재 화면 (setContentView 내 MainActivity에서 호출 된 이후)보기에서 얻을 수 없기 때문에, 나는 그것을 작동하게 만들 수 없습니다.

아이디어가 있으십니까?

+0

관련 - "이 활동이 시작되기 전에 이미 컨텐트보기가 설정되어 있습니다." 너? 방법? 액티비티가 실제로 생성되기 전에 언제든지'setContentView'를 호출 할 수 없습니다 ... –

+0

글쎄, MapsActivity.java에 설정된 컨텐트 뷰가 없습니다. 그것은 오래 전에 만들어진 MainActivity.java에 설정되어 있습니다. MainActivity에서 다음과 같이 보입니다 : trackFunction() { setContentView (layout); .... createIntent(); <- MainActivity에서 setContentView를 설정 한 후 MainActivity에서 새 MapsActivity를 호출하는 함수입니다. } – user3720749

+0

활동은 완전히 별개의 항목입니다. 'MainActivity'의'setContentView'는'MapsActivity'에 아무런 영향을 미치지 않습니다. –

답변

0

내가 새 활동 클래스를 만들 때 현재 사용중인 화면에 있어야하는 항목을 찾을 수 없습니다. findViewById (..);

오른쪽 ... 그러나 extends FragmentActivity이있는 것 같으므로 Fragments를 사용하고 있음을 나타내므로 실제로 새로운 활동이 필요하지 않습니다.

간단히 extends SupportMapFragment을 입력하여 Google지도 조각의 맞춤 구현을 정의 할 수 있습니다. 그런 다음 해당 서브 클래스를 사용하도록 XML을 업데이트하거나 findFragmentById을 가져 오거나 프로그래밍 방식으로 해당 맵 조각을 MainActivity에 프로그래밍하여 FrameLayout으로로드 할 수 있습니다.
Fragment 클래스의 getActivity() 메서드를 통해 MainActivity에서 데이터를 참조 할 수 있도록 허용합니다.

MainActivity.Java의 어느 시점에서 화면 내용을 layout - setContentView (layout)으로 변경합니다.

setContentViewonCreate 인 후 실제로 그렇게해서는 안됩니다. 주된 이유는 처음에 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() 메소드를 구현, 항상 setContentView(getLayoutResource()) 전화가 onCreate를 오버라이드 (override) 할 수있다.그래도 당신이 필요로하는 것에는 너무 복잡해 보입니다.

+0

정보를위한 감사합니다. 나는 당신의 제안에 함께 새로운 활동을 버리고 모두 끝내었다. FragmentActivity를 추가로 확장해야한다고 생각했기 때문에 처음부터이 작업을 수행하지 않았으며, 주요 활동은 이미 AppCompatActivity를 확장합니다. 어쨌든, 나는 MapsActivity에 있던 것을 MainActivity에 넣고 onMapReady 함수를 만들었고 필요에 따라 작동합니다. – user3720749

+0

AppCompatActivity는 FragmentActivity를 확장하지만, 듣기는 대단히 기쁩니다. –