제가 만드려는 것은, 예를 들어 AAA 클래스와 BBB 클래스가 있다고 가정할 때,
AAA 클래스의 화면에서 어떤 버튼을 하나 누르면 BBB 클래스의 화면으로 바뀌고,
BBB 클래스 화면으로 바뀐 상태에서 뒤로가기를 누르면 다시 AAA 클래스 화면으로
돌아가게 하는 것입니다. BBB 클래스의 화면으로 바뀌는 순간,
AAA 클래스의 화면에 있던 버튼들을 포함한 위젯들은 모두 사라져야겠죠
이것을 XML이 한 개인 상태에서 setContentView를
사용해서 구현하는 게 가능한지가 궁금합니다.
지금 제가 시도하는 방법은 AAA 클래스에서 XML 파일을
화면으로 사용하고, 거기서 setContentView 메소드의
매개 값으로 BBB 클래스의 참조변수를 전달함으로써
BBB 클래스 화면으로 바꾸는 방식입니다.
(사실 이건 화면을 바꾼다기보다, AAA 클래스의 화면에서
발생할 여러가지를 BBB 클래스에서 코딩한다라는게
더 정확한 표현일 수 있겠군요.)
지금 제가 setContentView 메소드를 사용해서 화면을 바꾸면
뒤로가기를 눌렀을 때 앱 자체가 종료 되버리는데요.
앱이 종료되지 않고 이전 화면으로 돌아가게 만드는 것을
구현하고 싶습니다.
물론 Intent를 이용하면 뒤로가기를 눌러도 앱이 종료되지 않고
이전 화면으로 갈 수 있기는 합니다. 하지만, BBB 클래스는 Canvas랑
Paint 등을 이용할 것이기 때문에 AppCompatActivity 클래스가 아니라
TextureView 클래스를 상속 받고 있거든요. 그 때문인지는 몰라도
AAA 클래스 화면에서 Intent를 활용하여 BBB 클래스 화면으로
바꾸려고 하면 앱이 오류가 나면서 팅겨버립니다.
그렇다고 해서 BBB 클래스를 위한 XML을 하나 더 만든다고 해도
Activity 관련 클래스가 아닌 TextureView 클래스를 상속하고 있다보니
setContentView 메소드를 사용할 수가 없네요. Activity 관련 클래스를
상속하면 되지 않냐고 해도, 그러면 Canvas를 사용할 수가 없어요.
실력이 한참 부족한 저로서는 진퇴양난이네요. ㅜㅜ
일단 제가 짠 코드를 보여드리겠습니다.
--------------- 아래는 AAA 클래스 입니다. ---------------
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class AAA extends AppCompatActivity
{
private BBB bbb;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bbb = new BBB(this);
startButton = (Button)findViewById(R.id.Start_Button);
startButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
setContentView(bbb);
}
});
}
}
--------------- 아래는 BBB 클래스 입니다. ---------------
import android.content.Context;
import android.graphics.SurfaceTexture;
import android.view.TextureView;
public class BBB extends TextureView implements TextureView.SurfaceTextureListener
{
public BBB(Context context)
{
super(context);
setSurfaceTextureListener(this);
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1)
{
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i1)
{
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture)
{
return true;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture)
{
}
}
위 두 코드가 바로 각각 AAA 클래스, BBB 클래스입니다.
어떻게든 해결해보려고 셀 수 없는 시도를 해보고 수많은
수정을 거쳤는데도 해결하지 못했습니다. ㅜㅜ
------------------------------------------------------------
질문이 길어서 불편하신 분들을 위해 짧게 정리하자면,
AAA 클래스에서 setContentView 메소드를 활용하여 BBB 클래스로
화면 전환을 하고 싶은데, BBB 클래스 화면으로 바뀐 상태에서 뒤로가기를
눌렀을 때 앱이 종료되지 않고 이전 화면으로 (AAA 클래스 화면으로)
돌아가게 하는 방법을 알고 싶습니다.
단, BBB 클래스에서는 Canvas와 Paint 등등 그림 그리는 기능을
이용할 것이기 때문에 TextureView 클래스를 상속하고 있구요.
그렇기 때문에 이 BBB 클래스는 Activity 관련 클래스를
상속하고 있지 않으므로 setContentView 메소드를 사용할 수
없기 때문에 AAA 클래스 화면으로 쓰이고 있는 XML 파일을
BBB 클래스에서도 써야하는데, 하나의 XML 파일을 같이 쓰려고
하다보니 BBB 클래스 화면에서는 AAA 클래스 화면의 위젯들이
하나도 안보여야 합니다. 어떻게 해야 될지 알려주세요. ㅠㅠ
------------------------------------------------------------
저 진짜 이 문제 때문에 이런저런 방법은 다 시도해보고
정말 열심히 제가 할 수 있는 노력을 다 해보았는데도 도저히
해결되지가 않아서 도움을 요청하는 겁니다. ㅠㅠ
제발 도와주세요. ㅜㅜ
(만약 아예 색다른 방법으로 해결이 가능하다면
어떻게 해야 하는지 알려주세요 ... ㅠㅠ)