반응형
반응형

#안드로이드 액티비티간의 데이터 전달 (intent 사용법) - 2


  • 인텐트를 통해서 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 정확히 아는 경우에는 '명시적인 인텐트(Explicit Intent)'
  • 액션과 데이터를 지정 하긴 했지만 호출할 대상이 달라질 수 있는 경우에는 '암시적인 인텐트(Implicit Intent)'

* 명시적인 인텐트와 암시적인 인텐트의 예시

전화번호 다이얼로 액티비티 띄우기(Action), 특정 A라는 액티비티로 데이터 전달을 할 경우 등등은 명시적인 인텐트라고 하며 암시적인 인텐트는 어떠한 걸 띄우기 잘 모를때 사용하는 것으로 만약 pdf나 문서 편집 어플을 통해서 보여줘야할 경우, 암시적인 인텐트를 통해서 휴대폰 단말기에 설치된 앱들 중에서 적절한 어플을 실행 시킬 수 있다.



반응형

#안드로이드 액티비티간의 데이터 전달 (intent 사용법) - 1 : 
https://developer.android.com/reference/android/content/Intent.html


인텐트란, Activity를 띄우는 과정에서 인텐트(Intent)라는 것을 생성하고 인텐트의 파라미터로 액티비티 클래스 객체를 전달하여 새로운 액티비티를 띄울 수 있다.


listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
view.setFocusable(false);

Intent intent = new Intent(AssemblyListActivity.this, AssemblyDetailActivity.class);
intent.putExtra("numOfRows",20); // 한페이지 결과수
intent.putExtra("pageNo",PAGE); // 페이지
intent.putExtra("dept_cd",searchList.get(position).getDeptCd()); // 부서코드
intent.putExtra("num",searchList.get(position).getNum()); // 국회의원 번호
intent.putExtra("jpgLink",searchList.get(position).getJpgLink()); // 사진
intent.putExtra("empNm",searchList.get(position).getEmpNm()); // 국회의원 이름
startActivity(intent);
}

});


@Override

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_assem_detail);

// 넘어온 변수 받아오기
Intent intent = getIntent();
int numOfRows = intent.getIntExtra("numOfRows", 20);
int pageNo = intent.getIntExtra("pageNo", 1);
String dep_cd = intent.getStringExtra("dept_cd");
String num = intent.getStringExtra("num");
String jpgLink = intent.getStringExtra("jpgLink");


1) 데이터 전달하기

Intent intent = new Intent(현재Activity명.this, 전달해줄Activity명.class);

intent.putExtra("전달할 데이터명",); // 한페이지 결과수

startActivity(intent); // 전달 


2) 데이터 받기

Intent intent = getIntent();

String dep_cd = intent.getStringExtra("가져올 데이터명");




*Bean 객체 intent 전달 방법


1) Intent로 전달할 객체를 Serializable 인터페이스 상속받아주기 

package com.example.n3815.new_app.common.bean;

import android.graphics.drawable.Drawable;

import com.example.n3815.new_app.common.SearchCommon;

import org.simpleframework.xml.Element;

import org.simpleframework.xml.Root;

import java.io.Serializable;

/**

 * Created by N3815 on 2016-12-27.

 * 국회의원 기본 정보 pojo 객체

 */

@Root(name = "item")

public class AssemBean implements Serializable{

    @Element(name = "deptCd", required = false)

    private String deptCd; // 부서코드

    @Element(name="num", required = false)

    private String num; // 식별코드

    @Element(name="empNm", required = false)

    private String empNm; // 한글이름

      ...................

}


2) Serializable 인터페이스를 상속받은 객체를 intent로 전달하기

ArrayList<AssemBean> assemblyList new ArrayList<AssemBean>(); // 전체 국회의원의 정보를 담는 객체

assemblyList.add(Object);

Intent intent = new Intent(LoadingActivity.this, AssemblyListActivity.class);

intent.putExtra("aseem", assemblyList); // 전달받은 객체 전달 startActivity(intent); // 화면에 뿌리기


3) Intent로 전달받은 객체 가져오기

ArrayList<AssemBean> assemblyList = new ArrayList<AssemBean>(); // 전체 국회의원의 정보를 담는 객체


// intent 받아온 Array 정보 가져오기
assemblyList = (ArrayList<AssemBean>) getIntent().getSerializableExtra("assem");




*부모 Activity 또는 타 Activity의 메소드 실행시키기

// 변경된 정보값을 다시 원본 배열에게 알리기

((AssemblyListActivity) context).changeItemInfo(selectedAssem);

  • ((전달/실행시키려는 Activity명) context).호출할 메소드명(전달값);


* 여러 Activity를 요청 코드로 분류하여 요청하기 

public static final int REQ_CODE_ANOTHER_ACTIVITY = 1001;


// 1. 새로운 액티비티 요청시 요청코드와 함께 액티비티를 띄우기

public void onButton1Clicked(View v){

Intent intent = new Intent(getApplicationContext(), AnotherActivity.class);

startActivityForResult(intent, REQ_CODE_ANOTHER_ACTIVITY);

}


// 2. 요청한 액티비티 전달이 잘 되었는지 확인 

public void onActivityResult(int requestCode, int resultCode, Intent intet){

super.onAcitivyResult(requestCode, resultCode, intent);


if(requestCode == REQ_CODE_ANOTHER_ACTIVITY){

// 1번에서 띄운 액티비티의 요청 : onActivityResult가 실행됨

}


if(reslutCode == RESULT_OK){

// 응답으로 전달된 내용

}

}




* Intent의 Action 사용법

Intent intent = new (Itent.ACTION_DIAL, uri,parse("01012341234")); // new (Intent Action, 데이터)

startActivity(intent); // intent 메소드(intent);


* Intent Action 종류

 Action name

 설명

 ACTION_MAIN

 

 ACTION_ATTACH_DATA

 

 ACTION_PICK

 

 ACTION_GET_CONTENT

 

 ACTION_CALL

 전화 걸기 

 ACTIOIN_SENDTO

 

 ACTION_RUN

 

 ACTION_PICK_ACTIVITY

 

 ACTION_WEB_SEARCH

 
 ACTION_VIEW 
 ACTION_EDIT 
 ACTION_CHOOSER 
 ACTION_DIAL 
 ACTION_SEND 

 ACTION_SYNC

 

 ACTION_SEARCH

 
 ACTION_ANSWER 
 ACTION_DELETE 
 ACTION_FACTORY_TEST 


* Intent 메소드 종류

  1. startActivity() : 액티비티를 띄울 때 사용
  2. startService() : 서비스를 시작 시킬 때 사용
  3. broadcastIntent() : 브로드캐스팅을 수행할 때 사용

어지는 링크


+ Recent posts