2016-08-10 2 views
0

두 활동 "Name_Status"및 "Main_activity"가 있습니다. Main_activity에서 조각이 생겼습니다. Name_Status 활동에서 Main_activity 조각 중 하나로 문자열 값을 보내려고합니다.활동에서 다른 활동의 단편으로 텍스트를 보내는 방법

@Override 
public void onClick(View v) { 

    if (v.getId() == R.id.ok_change_name) 

    { 
     name = name_change.getText().toString(); 
     System.out.println(name); 
     Log.d("entered", "entred"); 
     MainActivity obj=new MainActivity(); 
     Log.d("obj created", "obj created"); 
     obj.changeMainName(name); 
     Log.d("obj.changename", "obj.changename"); 

    } 
} 

제가 먼저 Main_activity에 데이터를 전송하고이 데이터를 다음과 같이 프래그먼트에서 전송있어이 방법을 사용하여 :

는 아래 Name_Status 활동의 방법이다.

public void changeName(String s) 
{ 

    Log.d("changename entry" ,"changename netry"); 
    System.out.println(s); 
    System.out.println(name_field.getText().toString()); 
     name_field.setText(s); 
    System.out.println(name_field.getText()); 
} 
: 여기에 내가 조각 클래스에 문자열 값을 보내고있다 거기 I는 다음과 같은 텍스트 뷰에 문자열을 설정하고있어에서 이제

public void changeMainName(String s) { 
    FragActivity1 obj = (FragActivity1) getSupportFragmentManager().findFragmentById(R.id.person_profile); obj.changeName(s); 
} 

: 아래

는 Main_activity의 코드

나는 obj.changeMainName (이름)에서

NullPointerException이납니다;

+0

난 당신이 텐트를 사용하는 안드로이드 다른 Activivity로 데이터를 전송하는 자바 및 안드로이드에 대한 혼란 생각, 당신은을 만들 수 있습니다 의도 및 putExtra() 메서드를 사용하여 당신이 데이터를 사용하는 활동에서 getExtra() –

+0

당신은 새로운 활동을 할 수 없다, 당신은 활동을 시작해야합니다, 그리고'ActivityManager'는 활동 인스턴스를 생성하고 응답을 불러올 것입니다 라이프 사이클 메소드. – li2

답변

2

Intent 번들로 데이터 전송 그런 다음 두 번째 작업에서 데이터를 getIntent().getExtras()으로 가져온 다음 데이터를 조각으로 전달합니다.

+0

변경 ** MainActivity obj = 새 MainActivity(); ** 및 ** obj.changeMainName (이름); ** ** 인 텐트 obj = 새로운 인 텐트(); obj.setClass (Name_Status.this, MainActivity.class); obj.putExtra ("namekey", "name"); startActivity (obj); ** –

+0

obj.setClass에서의 NullPointerException (Name_Status.this, MainActivity.class); –

+0

이'Intent obj = new Intent (Name_Status.this, MainActivity.클래스 변경); –

3

일부 릴레이를해야 할 것입니다. 예를 들어 단편이없는 활동 A와 단편이있는 활동 B가 있습니다. 안드로이드 프레임 워크에서 먼저 액티비티 A에서 B로 데이터를 전달할 수 있고 액티비티 B에서는 뷰 계층 구조에 따라 데이터를 Fragment로 전달할 수 있습니다. 활동 A.에서

가 활동 B 안에 지금

Intent intent = new Intent(this, ActivityB.class); 
     intent.putExtra("key", "value"); 
     startActivity(intent); 

를 다음을 수행 파편

시작하기 전에

String stringValue= getIntent().getStringExtra("key"); 

그런 다음 인수로 데이터 당신의 조각을 전달 활동에서 데이터를 얻을 수

Bundle bundle = new Bundle(); 
    bundle.putString("key", stringValue); 
    ActivityBFrag fragment = new ActivityBFrag(); 
    fragment.setArguments(bundle); 

    FragmentTransaction transaction = fragmentManager.beginTransaction(); 
    transaction.replace(container, fragment, tag); 
    transaction.addToBackStack(tag); 
    transaction.commit(); 

그런 다음 Fragment 클래스 내부. 당신 싶어 액세스 데이터가,에서 onCreate 안에 할 수 있습니다 때마다 다음과 같은 데이터를 얻을 수 등 OnActivityCreated

public void getArguments(){ 
    Bundle bundle = getArguments(); 

    if(bundle != null){ 
     String stringValue = bundle.get("key"); 
    } 
} 
+0

방금 ​​변경 MainActivity obj = new MainActivity(); obj.changeMainName (name); ' '인 텐트 obj = 새로운 인 텐트(); obj.setClass (Name_Status.this, MainActivity.class); obj.putExtra ("namekey", "name"); startActivity (obj); ' –

+0

이번에는 obj.setClass에서 Nullpointer 예외 (Name_Status.this, MainActivity.class); –

+0

런타임 중에 데이터를 전달하는 것은 좋지 않습니다. 단순히 NPE보다 많은 문제를 야기 할 수 있습니다. 위에서 설명한 방법을 따르십시오. 그것의 깨끗하고 안전한, 그리고 물론 당신은 null 값을 항상 확인해야합니다. –

관련 문제