Android 앱 : 화면 전환의 메커니즘을 간단한 코드로 설명해 봅니다.

지난번
Android 앱: 이벤트와 리스너를 함께 봅니다.

계속. . .

소개



입사 3개월의 페이페입니다. 안드로이드 앱 개발 공부 중입니다. 공부가 정리되어 있습니다.

입문서 레벨의 지식을 나름대로 물고 있습니다. 끝이 접혀있는 부분도 많이 있으므로주의를.

이번에 정리하는 범위



이번에는 화면 전환에 대한 간단한 코드로 요약합니다.
・화면 천이의 기초의 기초를 알고 싶다.
・인텐트를 심플하게 이해하고 싶다.
라는 방향입니다.

작성하는 것은 텍스트를 입력해 송신 버튼을 누르면, 화면 천이 후에, 입력된 텍스트를 표시해 주는 앱입니다.

이번에 나오는 말들


  • 의도

  • 간단히 말해서 액티비티에서 다른 액티비티로 정보를 운반하기 위한 가방과 같은 것.
    이번과 같이 화면 1의 액티비티에 있는 문자열을 인텐트라는 상자에 넣어두면 화면 2에서 그 상자를 호출하면 화면 2에서도 그 문자열을 사용할 수 있다.

    전회 이전의 말들


  • 이벤트

  • 버튼을 누르는 등 사용자 화면 조작의 순간
  • 리스너

  • 언제 이벤트가 일어날 수 있도록, 이벤트를 감시해 두는 것.
  • 활동

  • 앱 화면 자체.

    샘플 & 해설



    환경



    androidstudio 3.6.2
    openjdk 버전 "11.0.6"

    만들 화면



    이번에 작성하는 화면입니다.


    버튼을 누르면 입력된 문자가 천이처에 표시할 수 있도록 써 갑니다.
    필요한 java 클래스가 2개와 레이아웃 파일을 2개 작성합니다.

    MainActivity.java
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //送信ボタンをリスナ設定
            Button btClick = findViewById(R.id.btOutput);
            Listener listener = new Listener();
            btClick.setOnClickListener(listener);
        }
    
    
        //リスナクラスを作成
        private class Listener implements View.OnClickListener{
            @Override
            public void onClick(View v) {
                EditText input = findViewById(R.id.sendEditText);
                String inputStr = input.getText().toString();
    
                //インテントオブジェクトを生成
                Intent intent = new  Intent(MainActivity.this,OutputActivity.class);
                //画面②に送るデータを格納
                intent.putExtra("inputText",inputStr);
                //画面の起動
                startActivity(intent);
            }
        }
    }
    
    

    OutputActivity.java
    
    public class OutputActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.sub_activity);
    
            //画面①で作成したインテントオブジェクトを取得
            Intent intent = getIntent();
            //文字情報を取得して、画面出力
            TextView output = findViewById(R.id.outputText);
            String outputText = intent.getStringExtra("inputText");
            output.setText(outputText);
        }
    }
    
    

    activity_main.xml
    <LinearLayout ~~省略~~>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/title"/>
        <EditText
            android:id="@+id/sendEditText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/btOutput"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="次の画面へ"/>
    </LinearLayout>
    
    

    sub_activity.xml
    <LinearLayout~~省略~~>
    
        <TextView
            android:id="@+id/outputText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="40dp"/>
    
    </LinearLayout>
    

    메커니즘과 의도에 대해



    앱 시작: MainActivity 처리(이 과정에서 첫 화면이 표시됨)

    송신 버튼 이벤트 발생: OutputActivity의 처리(제2 화면이 표시)

    즉, 이 송신 버튼 이벤트 발생시에, 유저가 입력한 캐릭터 라인 데이터를 인텐트를 사용해 MainActivity로부터 OutputActivity에 보내고 있습니다.
    인텐트는, 이벤트 발생시에 준비해 두는 것이 되므로, 청취자 클래스에 기술해 둡니다.

    의도라는 상자에 데이터를 넣는 부분

    MainActivity.java
    
    //インテントオブジェクトを生成
    Intent intent = new  Intent(MainActivity.this,OutputActivity.class);
    //画面②に送るデータを格納
    intent.putExtra("inputText",inputStr);
    //画面の起動
    startActivity(intent);
    

    인텐트 객체 생성

    인텐트에 저장할 데이터를 putExtra로 저장

    다음 화면 시작

    인텐트 오브젝트 작성시, 제1 인수에는 원화면의 Activity 클래스·제2 인수에 보내고 싶은 화면의 Activity 클래스를 기재합니다.

    SubActivity.java
    
    //画面①で作成したインテントオブジェクトを取得
    Intent intent = getIntent();
    //文字情報を取得して、画面出力
    TextView output = findViewById(R.id.outputText);
    String outputText = intent.getStringExtra("inputText");
    output.setText(outputText);
    
    

    두 번째 화면에서 호출 부분. getIntent로 첫 화면에서 만든 인텐트 객체를 호출할 수 있습니다.
    그리고는, 캐릭터 라인을 표시시키는 처리를 쓸 뿐입니다.

    주의



    프로젝트 폴더 안에 AndroidManifest라는 안드로이드 설정에 필요한 정보가 들어있는 파일이 있습니다.
    화면이 두 화면 이상 있는 경우 여기에 Activity 이름을 추가하지 않으면 앱이 동작하지 않습니다. 여기에서는 아래와 같이 「」를 추가해 둡니다.
    
    <application~~省略~~>
            <activity android:name=".MainActivity">
               ~~省略~~
            </activity>
    
            <activity android:name=".OutputActivity"></activity>
    </application>
    
    

    끝에



    1월 정도로 입문서를 2개 조금 마쳤습니다.
    점점 이해가 진행되더라도 아직도 아마추어군요.

    다음은 라이프사이클에 대해 정리

    좋은 웹페이지 즐겨찾기