컴퓨터/android, ios

[Android Studio] activity에서 custom dialog로 정보 보내고 dialog에서 다른 activity로 이동하기

정석이 2021. 8. 11. 20:47

 

 

 

 

이런느낌

 

 

 

 

 

 

참고 그림에선 fragment라고 썼지만 사실 activity다...

activity 위에서 생성되는게 fragment인데 여기선 activity간 이동이었다... 아무튼!

 

 

 

 

 

activity에서 정보를 입력받아 custom dialog에 띄우고 거기서 버튼 누르면 다른 activity로 이동하기!

 

 

이거 찾는데 오래걸렸고,, 막 질문글도 썼었고.... 그래서 포스팅한다. 다들 화이팅!

 

 

 

 

 

 

 

 

 


 

 

activity에서 custom dialog로 정보 보내고 dialog에서 다른 activity로 이동하기

 

 

 

 

 

 

최종 화면 (app이름은 구려서 가림)

 

 

 

 

 

 

 

1번

 

manu_createqr.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="QR 생성 정보 입력하기"
        android:textStyle="bold"
        android:textColor="@color/black"
        android:textSize="20dp"
        android:layout_margin="20dp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="제품명"
        android:textColor="@color/black"
        android:layout_marginHorizontal="20dp" />

    <EditText
        android:id="@+id/facProductName"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_marginHorizontal="20dp"
        android:layout_marginTop="10dp"
        android:autofillHints="dd"
        android:background="@drawable/edit_syle"
        android:padding="10dp"
        android:entries="@array/qrName"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="제품브랜드"
        android:textColor="@color/black"
        android:layout_marginTop="20dp"
        android:layout_marginHorizontal="20dp" />

    <Spinner
        android:id="@+id/facBrandSpinner"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_marginHorizontal="20dp"
        android:layout_marginTop="10dp"
        android:background="@drawable/edit_syle"
        android:padding="10dp"
        android:entries="@array/qrBrand"
        />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="시리얼넘버"
        android:textColor="@color/black"
        android:layout_marginTop="20dp"
        android:layout_marginHorizontal="20dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/facSerial"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="5dp"
            android:layout_marginTop="10dp"
            android:layout_weight="9"
            android:background="@drawable/edit_syle"
            android:padding="10dp" />

        <Button
            android:id="@+id/facCreateButton"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_marginRight="20dp"
            android:backgroundTint="#000000"
            android:text="생성\n하기"
            android:textColor="@color/white"
            android:textSize="12sp" />

    </LinearLayout>

    <Button
        android:id="@+id/createQRbtn"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_marginTop="50dp"
        android:layout_marginHorizontal="10dp"
        android:backgroundTint="#000000"
        android:text="다음"
        android:textColor="@color/white"
        />

</LinearLayout>

 

 

 

 

사진에서 정보를 3개 받아와서 custom dialog로 보낸다.

 

public class manu_createQR_Activity extends AppCompatActivity {
    String Brand = null;

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


        EditText facProductName = (EditText) findViewById(R.id.facProductName);
        Spinner facBrandSpinner = (Spinner) findViewById(R.id.facBrandSpinner);
        EditText facSerial = (EditText) findViewById(R.id.facSerial);
        Button createQRbtn = (Button) findViewById(R.id.createQRbtn);



        //QR 생성하기 버튼을 눌렀을 때 -> QR 생성 정보 다이어로그 -> QR이 생성되었습니다 + QR보여주기
        createQRbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String Name = facProductName.getText().toString();
                Brand = facBrandSpinner.getSelectedItem().toString();
                if(facBrandSpinner.getSelectedItem().toString() == "브랜드를 선택해주세요.")
                    Brand = null;
                String Serial = facSerial.getText().toString();
                manu_createQR_Dialog dialog = new manu_createQR_Dialog(manu_createQR_Activity.this, Name, Brand, Serial);
                dialog.show();

            }
        });
    }
}

 

 

 

 

 

 

 

2번

 

 

manu_alert_qrcreate.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_margin="20dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@drawable/alert_style">

    <!--dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
    dialog?.window?.requestFeature(Window.FEATURE_NO_TITLE)-->


        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="20dp"
            android:text="QR 생성 정보"
            android:textColor="@color/black"
            android:textSize="20dp"
            android:textStyle="bold" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

        <TextView
            android:id="@+id/qrCreateName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="20dp"
            android:text="제품명: "
            android:textColor="@color/black" />

        <TextView
            android:id="@+id/qrName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="20dp"
            android:text="(제품명)"
            android:textColor="@color/black" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

    <TextView
        android:id="@+id/qrCreateBrand"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="제품브랜드: "
        android:textColor="@color/black"
        android:layout_marginHorizontal="20dp"
        android:layout_marginTop="5dp"
        />

        <TextView
            android:id="@+id/qrBrand"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="20dp"
            android:text="(브랜드명)"
            android:textColor="@color/black" />

    </LinearLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

    <TextView
        android:id="@+id/qrCreateSerial"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="시리얼넘버: "
        android:textColor="@color/black"
        android:layout_marginHorizontal="20dp"
        android:layout_marginTop="5dp"
        />

        <TextView
            android:id="@+id/qrSerial"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="20dp"
            android:text="(시리얼넘버)"
            android:textColor="@color/black" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/qrCreateBtn"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_weight="1"
            android:layout_marginTop="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="20dp"
            android:backgroundTint="#000000"
            android:text="다음"
            android:textColor="@color/white"  />

        <Button
            android:id="@+id/qrCancelBtn"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_weight="1"
            android:layout_marginTop="10dp"
            android:layout_marginRight="20dp"
            android:layout_marginLeft="10dp"
            android:backgroundTint="#000000"
            android:text="취소"
            android:textColor="@color/white" />

    </LinearLayout>


</LinearLayout>

 

 

 

 

 

사진인 custom dialog에서 받은 정보를 띄운다

 

public class manu_createQR_Dialog extends Dialog {

    private static String IP_ADDRESS = "IP 주소";
    private static String TAG = "manufacturer_QR";
    private Context context;
    private String Name, Brand, Serial;


    public manu_createQR_Dialog(Context context, String Name, String Brand, String Serial) {
        super(context);
        this.context = context;
        this.Name = Name;
        this.Brand = Brand;
        this.Serial = Serial;

    }

    public interface MyDialogListener{
        public void onPositiveClicked(String name, String brand, String serial);
        public void onNegativeClicked();
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE); // 다이얼로그 타이틀바 없애기
        getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); // 배경 투명으로
        setContentView(R.layout.manu_alert_qrcreate);

        TextView ProductName = (TextView) findViewById(R.id.qrName);
        TextView ProductBrand = (TextView) findViewById(R.id.qrBrand);
        TextView ProductSerial = (TextView) findViewById(R.id.qrSerial);

        ProductName.setText(Name);
        ProductBrand.setText(Brand);
        ProductSerial.setText(Serial);


        //버튼
        Button qrCreateBtn = (Button) findViewById(R.id.qrCreateBtn);
        Button qrCancelBtn = (Button) findViewById(R.id.qrCancelBtn);

       //등록 버튼
        registerBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
                intent = new Intent(getContext(), manu_createQR_see.class); //manu_createQR_see fragment로 이동
                getContext().startActivity(intent);

            }
        });
        

        //등록 취소 버튼
        registerCancelBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
                Toast.makeText(getContext().getApplicationContext(), "취소되었습니다.", Toast.LENGTH_SHORT).show();
            }
        });

    }
}

 

 

 

 

 

 

3번

 

manu_createqr_complete.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="300dp"
        android:layout_height="150dp"
        android:layout_gravity="center"
        android:layout_marginTop="20dp"
        tools:srcCompat="@drawable/createqrdone" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginHorizontal="20dp"
        android:layout_weight="2"
        android:layout_margin="20dp"
        android:orientation="vertical"
        android:background="@drawable/round_1w_r7_style">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <!--임시소스-->

            <ImageView
                android:id="@+id/qrCreateImage"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:layout_gravity="center"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:srcCompat="@drawable/qrexample" />

        </androidx.constraintlayout.widget.ConstraintLayout>


    </LinearLayout>
    
    <Button
        android:id="@+id/facQrHomeButton"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_marginHorizontal="10dp"
        android:layout_marginBottom="20dp"
        android:backgroundTint="#000000"
        android:text="홈으로 가기"
        android:textColor="@color/white"
        />

</LinearLayout>

 

 

class

public class manu_createQR_see extends AppCompatActivity {

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

 

 

 

 

 

 

 

 

 

 

 

참고로 custom dialog activity는 AndroidManifest.xml에 activity 추가할 때

 

 

<activity android:name=".manu_createQR_Dialog" android:theme="@android:style/Theme.Dialog"/>

 

 

이렇게 넣어야한다.