2013-07-05 7 views
1

의도를 사용하여 활동간에 몇 가지 값을 전달할 수 있음을 알고 있습니다. 그러나 전체 활동을 다른 활동으로 전달하려면 좋은 접근 방식이 아니라고 생각합니다. 다른 방법이 있습니까?
하나의 활동을 다른 활동으로 전달 참조 :

설정 활동을 통해 일부 색을 변경하고 있습니다. 그래서 나는 다시 나의 주요 활동으로 돌아와 그 색들을 적용하고 싶다. 이렇게하려면 색상 값을 변경 한 후 MainActivity 필드에 액세스해야합니다. 따라서 PreferenceActivity 내부에 있습니다. 즉, PreferenceActivity 클래스의 주요 활동 필드에 액세스 할 수 있습니다. 어떤 아이디어?

답변

3

SharedPreference을 사용하고 나서 주 활동에서 액세스해야합니다. http://developer.android.com/guide/topics/ui/settings.html에서 설정 활동을 잘못 구현하고있는 것으로 보입니다. 특별히 관심을 가질 부분은 "환경 설정 읽기" 섹션입니다. 그러나, 나는 당신이 모든 것을 읽고 그 다음 적절한 방법으로 설정을 구현할 것을 강력하게 제안합니다. 3 개 가지 방법으로

업데이트 대답은 (내가 생각할 수) :

1) onActivityResult() 액세스 SharedPreference에 다음 startActivityForResult()를 사용하여 환경 활동을 시작하고 필요한 사항을 변경합니다. 어떤 변경 사항이 SharedPreference에 일어날 때 호출됩니다 MainActivity를 가진 SharedPreferenceChangeListener 등록) here

2를 참조하십시오. 자세한 내용은here을 참조하십시오. 또한 내 초기 응답을 참조하십시오.

3) MainActivity의 onResume()SharedPreference에 액세스 한 다음 변경하십시오. 당신이 더 많은 논리 onResume()을 어수선하게 될 것이며 당신은 또한 아마 당신이 관심있는 변수의 상태를 추적 변수가 있어야하기 때문에 나는이 방법을 좋아하지 않는다. 나는 개인적으로 옵션과 함께 갈 것

2 왜냐하면 콜백은이 정확한 목적을 위해 생성 되었기 때문입니다.

+0

이미 읽었지만 PreferenceActivity – Marek

0

putExtra (name, value) 메서드를 사용하여 값을 전달할 수 있다고 생각합니다. 그리고 새로운 활동을 시작한 후에 getStringExtra (name) 메소드를 사용하여 이전에 전달한 값을 얻을 수 있습니다.

+0

전체 활동을 전달하고 싶습니다 ... – Marek

+5

@Marek : ** "나는 전체 활동을 통과하고 싶습니다 ..."** - 아니, 시도하지 마십시오. 변경 사항을 환경 설정에 저장하고'MainActivity'에서 변경 사항을'onResume()'에 다시 적재하십시오. 그 중 하나 또는 'startActivityForResult (...)'를 사용하면 데이터를 'Bundle'의 호출중인 'Activity'로 다시 전달할 수 있습니다. – Squonk

+0

@ 스퀘크 나는 당신이 제안한 것을했습니다. 사실 저는 전체 활동을 통과하는 것이 나쁜 생각이라는 것을 깨달았습니다. 그러나 어떤 경우에는 더 좋을 것이라고 생각합니까? 예를 들어 많은 데이터를 변경하려는 경우? 귀하의 의견을 답으로 기재하십시오. 가장 만족스럽고 받아 들일 만합니다. – Marek

0

많은 활동에서 필요한 많은 변경 사항을 원하는대로 변경하려면 다음 중 하나를 변경하십시오.

마지막으로 모든 활동의 데이터를 수정하고 수정합니다.

예를 들면.

MainActivity에서

public class Constants 
{ 

    public static String name; 
} 

당신은 EDITTEXT이 Constants.java.당신의 activity2에에서

MainActivity.java

public class MainActivity extends Activity { 

    private EditText yourName; 
    private Button btn; 

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

    yourName = (EditText) findViewById(R.id.yourName); 

    btn = (Button) findViewById(R.id.btn); 

    btn.setOnClickListener(new OnClickListener() 
    {  
     public void onClick(View v) 
     { 

      Constants.name = yourname.getText().toString(); 
      Intent intent = new Intent(getApplicationContext(),Activity2.class); 
      startActivity(intent); 

     } 
    }); 

} 

당신은 텍스트 뷰을 가지고 당신이 의도에 통과하지 않고 MainActivity.java에 입력 값을 받고.

Activity2.java 모든 활동에서 모든 활동에서 많은 값을 사용하여 수정 같은

public class Activity2 extends Activity { 

    private TextView yourName; 

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

    yourName = (TextView) findViewById(R.id.tv_yourName); 

    // directly use ferom serializable class 
    yourname.setText(Constants.name); 
} 

.

+0

에서 돌아온 직후에 변경 사항을 적용하고 싶습니다. 예제에서 상수 클래스를 제공 한 예제는 Serializable 일 필요가 없다고 생각합니다. – Marek

+0

예 ... 액티비티의 값을 Serializable 할 필요는 없습니다 ...하지만 다른 방법과 비교하면 쉽게 작동합니다 ... –

+0

@Marek에게이 점을 지적 해 주시면 감사하겠습니다 ... –

0

공유 환경 설정을 사용할 수 있습니다. 변경 사항을 즉시 반영하려면 리스너를 추가하십시오. SharedPreferences.onSharedPreferenceChangeListener를 참조하십시오. 그것의 쉬운 방법.