2016-09-13 3 views
-2

액티비티 A, B 및 C가 있습니다. 액티비티 A에서 액티비티 C로 일부 데이터를 전달해야합니다. 네비게이션은 A에서 B, C에서 액티비티 A로 바로 이동할 수 없습니다. A에서 B로 데이터를 전달하고 싶지 않으며 sqlite 나 공유 환경 설정과 같은 외부 저장소를 사용하고 싶지 않습니다. 의도를 통해 할 수 있습니까? 그렇다면 어떻게? 그렇지 않다면 다른 방법이 있습니까?액티비티 1에서 액티비티 3까지의 데이터를 액티비티 2를 통과시키는 동안 직접 전달하지만 데이터는 액티비티 2로 전달하면 안됩니다.

+3

그런 경우 정적 변수가 유일한 방법입니다. –

+2

''왜 A로부터의 활동 B에 내 데이터를 전달하고 싶지 않습니다. ' "이유가 무엇입니까? – pskink

+0

데이터가 활동 B에서 숨겨 지길 원합니다. – Nishith

답변

-1

예 확인합니다. 당신이 다음 활동을 C로 활동가에서 데이터를 전달하려면

public interface PassData { 
public void data(String data); 
} 

: 하나의 인터페이스를 만들

class ActivityA extend Activity{ 
    public static String abc = "hello"; 

} 

in ActivityC 

ActivityC extend Activity{ 

    onCreate(){ 
     String a = ActivityA.abc; 
     Log.d("test",a); 
    } 
} 
+0

나는 이것이 가장 적절하고 가장 짧은 해결책이라고 생각한다. – Nishith

+0

액티비티 클래스 내의 정적 변수는 좋은 해결책이 아니다. –

+0

내 오래된 주석을 읽었고, 나는 인터페이스 또는 정적 메서드를 사용한다고 말했다. @ n9153은 최상의 해결책으로 정적 방법을 발견했습니다. – LearnPainLess

0

다른 활동과 통신하기위한 인터페이스를 사용하십시오.

하거나 activity1에에 변수 public static을 할 수

+0

응답에 대한 감사 pawneshwar. 설명하고 좀 더 자세하게 설명해 주시겠습니까? – Nishith

+0

예. 예 : 활동 내역 class ActivityA 확장 활동 { \t public static String abc = "hello"; } ActivityC에 ActivityC 연장 활동 { \t에서 onCreate() { \t \t 문자열 A = ActivityA.abc; \t \t Log.d ("test", a); \t} } – LearnPainLess

+0

예제를 사용하여 새 응답을 확인하십시오. – LearnPainLess

0

다른 활동을 하나 개의 활동, 내가 가서 당신을 제안 있도록 의도를 사용할 수 없기 때문에 이제

에서 데이터를 전송하는 데는 여러 가지 방법이있을 수 있습니다 Application 클래스를 사용하거나 데이터를 저장할 전역 단일 클래스를 만듭니다. 1 단계 :

응용 프로그램 클래스를 생성하는 단계는 https://androidresearch.wordpress.com/2012/03/22/defining-global-variables-in-android/

링크를 다음 다음을 참조하십시오 모든 클래스를 만들고 응용 프로그램 클래스를 확장 :

public class Globals extends Application{ 
    private int data=200; 

    public int getData(){ 
    return this.data; 
    } 

    public void setData(int d){ 
    this.data=d; 
    } 
} 

2 단계 : 정의 매니페스트 파일의 응용 프로그램 클래스 :

<application 
    android:name=".Globals" 
    .... /> 

3 단계 : 이제 calli 애플리케이션 클래스를 얻는 액티비티에서 getApplication()을 호출한다. 그냥 타입 변환하고 필요한 메소드를 호출하십시오.

Globals g = (Globals)getApplication(); 
int data=g.getData(); 

이 정보가 도움이되기를 바랍니다.

+0

또한 정적 변수를 정의하는 쉬운 해결책은 권장하지 않습니다. –

+0

아니요, ** ** 정적 싱글 톤을 사용하고,'Appication'을 읽어야합니다. javadocs :''일반적으로 Application을 서브 클래스 할 필요가 없습니다. 대부분의 경우, 정적 싱글 톤은 모듈화 된 방식으로 동일한 기능을 제공 할 수 있습니다. " – pskink

+0

예 싱글 톤을 만드는 것이 좋은 해결책이며, 이것이 두 번째 옵션에서 제안한 것이지만 Activity 내에서 정적 변수를 만드는 것은 권장되지 않습니다. –

0

문제는 세 번째 활동에서 번들을 보낸 활동을 알 수있는 방법이 없다는 것입니다. 해당 번들의 유형을 식별하는 필드를 추가해야합니다. 따라서이 필드를 적절하게 처리 할 수 ​​있습니다. 예를 들어, 활동 1 :

Intent i = new Intent(ActivityOne.this, ActivityTwo.class); 
    i.putExtra("activity", (int)1); 
    i.putExtra("key", value); 
    startActivity(i); 

그리고 제 3 활동 :

Bundle extras = getIntent().getExtras(); 
if(extras !=null) { 
    int typeAct = extras.getInt("activity"); 
    if (typeAct == 1) { 
//do something with data 
    } 
0

액티비티 예를 들면 을 활동 A로부터 당신은 같은 데이터를 전달해야 이 : 다음 활동 C에서 활동 A.

PassData passData;// make it global variable 
passData.data("Your DATA WHICH YOU WANT TO SEND TO ACTIVITY C"); 

에 :

,
ActivityC extends AppCompatActivity implements PassData{ 
//onCreate Stuff 

@Override 
    public void data(String data) { 
    // print this data and see it's coming or not 

} 
관련 문제