본문 바로가기
Android

Intent 사용 2

by noddu 2021. 3. 23.
728x90
반응형

● 로그인 페이지

public class MainActivity extends AppCompatActivity {

    EditText edt_id, edt_pw;
    Button btn_login;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn_login = findViewById(R.id.btn_login);
        edt_id = findViewById(R.id.edt_id);
        edt_pw = findViewById(R.id.edt_pw);

        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String id = edt_id.getText().toString();
                String pw = edt_pw.getText().toString();

                if(id.equals("admin") && pw.equals("1234")){
                    Intent intent = new Intent(MainActivity.this, subActivity.class);
                    intent.putExtra("id",id);
                    intent.putExtra("pw",pw);
                    startActivity(intent);
                }

            }
        });
    }
}

id와 pw가 맞으면 id,pw를 가지고 SubActivity로 넘어감

public class subActivity extends AppCompatActivity {

    TextView tv_result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub);
        tv_result = findViewById(R.id.tv_result);

        // tv_result.setText(getIntent().getStringExtra("id")); <- 한 줄로 가능
        //tv_result = findViewById(R.id.tv_result);

        Intent intent = getIntent();
        String str = intent.getStringExtra("id");
        String str2 = intent.getStringExtra("pw");
        tv_result.setText(str + "님 로그인 성공! \n비밀번호는 " + str2 + "이다잉");
    }
}

 

 

Main에서 입력한 로그인 정보가 맞으면     ->    Sub에서 id정보 띄우기

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

● ColorPicker

Main -> Sub -> 다시 Main으로 ( Main에서 뭔가 바뀌게 )

 

 

Main에 Sub로 갈 버튼과 OnClickListener 만들고

 

 

Sub에 ListView 만들기

 

strings.xml - 앱에서 사용되는 text들을 관리하는 파일 ▼

<resources>
    <string name="app_name">Ex0323_Intent_Login</string>
    <!-- ListView에 적용될 문자 데이터 지정 -->
    <string-array name="colors">
        <item>Red</item>
        <item>Green</item>
        <item>Blue</item>
    </string-array>
</resources>

app_name 바꾸면 어플이름 바뀜

 

string-array 안에 item으로 들어갈 데이터를 R,G,B로 지정함

 

 

 

 

다시 Main에서 entries 속성

 

만들어둔 colors 지정하면 ListView가 뜬다

 

 

◎MainActivity

int requestCode = 1; //요청 코드 값


btn_background = findViewById(R.id.btn_background);
  
  

 btn_background.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, ListActivity.class);
                startActivityForResult(intent, requestCode);
            }
        });
    }
}

Main에서 List(sub)로 보내고 startActivityForResult( List로 보낼때)를 사용해서intent로 보내고 requestCode(요청값) 돌아오게 설정한다.

 

 

◎ListActivity

public class ListActivity extends AppCompatActivity {

    ListView lv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);


        lv = findViewById(R.id.listView);
        // 리스트뷰의 항복이 선택된 걸 감지하기

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //1. parent -> ListView 자체
                //2. view -> 이벤트가 발생한 해당 뷰
                //3. position -> 이벤트가 발생한 뷰의 index ( 0, 1, 2 , ...)
                //4. id -> 이벤트가 발생한 뷰의 고유 id값 ( position 과 같음)

                String choice = "";

                if(position == 0){
                    choice = "#800000"; //빨강
                }else if(position == 1){
                    choice = "#006400";  //초록
                }else if(position == 2){
                    choice = "#191970"; //파랑
                }
                Toast.makeText(getApplicationContext(), choice, Toast.LENGTH_SHORT).show();

                //어떤 색을 선택했는지 저장할 Intent
                Intent intent = new Intent();
                intent.putExtra("color",choice);
                setResult(RESULT_OK, intent);
                // 결과가 성공적으로 저장되었다는 코드값 , Android 에서 미리 지정해둔 상수( -1 )
                finish();
            }
        });
    }
}

List(sub)에서는 onItemClickListener ( 매개변수 4개 설정됨 )

 

Intent 안에 값만담으면 돼서 안에 아무것도 넣지 않는다.

 

setResult( Main으로 되돌릴때 ) , RESULT_OK(결과가 성공적)라는 상수와 intent를 넣어 보내줌

 

 

 

 

 

◎MainActivity

public class MainActivity extends AppCompatActivity {

    EditText edt_id, edt_pw;
    Button btn_login, btn_background;
    int requestCode = 1; //요청 코드 값
    ConstraintLayout layout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        layout = findViewById(R.id.layout);
        
        
        
 btn_background.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, ListActivity.class);
                startActivityForResult(intent, requestCode);
            }
        });
    }


    //onActivityResult
    // alt + insert


    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        //1. requestCode -> 요청코드값 (어떤 버튼을 눌러서 갔다 온건지 구분하기 위함)
        //2. resultCode -> 결과 코드값 (결과가 잘 넘어왔는지)
        //3. data -> 넘어온 결과값(Nullable - 생략가능한, null 일수도 있음 이라는 뜻)

        if (requestCode == this.requestCode){   // color 버튼을 클릭해서 다녀온건지
            if (resultCode == RESULT_OK){    //결과가 OK 인지
                // Intent에서 값 꺼내기
               String color = data.getStringExtra("color");

               // 배경색 바꾸기
                layout.setBackgroundColor(Color.parseColor(color));
            }

        }
    }
}

그러면 다시 Main에서 그 값을 받아서 배경색을 변경해주기 - onActivityResultOncreate 밖에서 Override 해서 만들기배경색 바꿔야해서 layout속성 바꾸기 위해 id값 설정과 findviewid 해줘야함

 

 

 

 

게시판에서(main) 로그인 -> 로그인화면(log) -> 로그인 -> 게시판(main)에서 환영합니다로 바꿔주기

 

 

 

 

◎MainActivity

public class MainActivity extends AppCompatActivity {


    Button btn_login, btn_write;
    TextView tv_result;
    final int LOGIN = 1;    //상수는 변수와 구분짓기위해 대문자로 적기!

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn_login = findViewById(R.id.btn_login);
        tv_result = findViewById(R.id.tv_result);

        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SubActivity.class);
                startActivityForResult(intent, LOGIN);
            }
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == this.LOGIN){  //sub 갔다가 잘 왔는지?
            if(resultCode == RESULT_OK){    //성공여부
                String id = data.getStringExtra("id");
                tv_result.setText(id+"님 ㅎㅇ요");
            }

        }
    }
}

 

◎LoginActivity

public class SubActivity extends AppCompatActivity {

    EditText edt_id, edt_pw;
    Button btn_login2;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub);

        btn_login2 = findViewById(R.id.btn_login2);
        edt_id = findViewById(R.id.edt_id);
        edt_pw = findViewById(R.id.edt_pw);

        btn_login2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String id = edt_id.getText().toString();
                String pw = edt_pw.getText().toString();

                if (id.equals("admin") && pw.equals("1234")){
                    Intent intent = new Intent();
                    intent.putExtra("id",id);   // 회원정보 맞으면 id만 가져가기
                    setResult(RESULT_OK,intent);    //Main 으로 돌아갈때 intent 들고 가기
                    finish();
                }else{
                    Toast.makeText(getApplicationContext(),"누구세연",Toast.LENGTH_SHORT).show();
                }
            }
        });

    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'Android' 카테고리의 다른 글

Adapter -> Custom ListView활용  (0) 2021.03.25
Adapter View  (0) 2021.03.24
Intent 사용하기  (0) 2021.03.22
Constraint Layout + 주사위게임 만들기  (0) 2021.03.21
View와 xml 이란  (0) 2021.03.21