0

주 활동에서 ip 인 편집 텍스트 환경 설정의 새 값을 사용하고 싶습니다. 나는 주 활동에 가치를 보여줄 필요가 없다. 이를 시도 할 때, 앱을 닫고 다시 열 때까지 기본값 만 얻습니다.가까운 애플리케이션이없는 주 활동에서 edittext preferenceactivity의 새 값 사용

작성된 직후에 새 값을 저장하는 방법 만 알고 있습니다.

onResume()을 무시하고 환경 설정 여부를 확인하는 데 사용

public String IP; 
public int puerto; 

//Para crear el menu de settings 
@Override 
public boolean onCreateOptionsMenu(Menu menu){ 

    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.mainmenu, menu); 
    return true; 


} 

//Se ponen las opciones de los iconos del menu 
public boolean onOptionsItemSelected(MenuItem item){ 

    switch (item.getItemId()) { 
    case R.id.settings: 
     startActivity(new Intent(getApplicationContext(),SettingsActivity.class)); 
     break; 

    case R.id.camera: 

     break; 

    case R.id.exit: 
     this.finish(); 
     break; 

    default: 
     break; 
    } 

    return true; 


} 





/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 



    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

    IP = preferences.getString("prefIP", "127.0.0.1"); 
    puerto = Integer.parseInt(preferences.getString("prefPort", "1101")); 

//After that I use the values to use a socket connection 

} 

// 환경 활동 코드

import android.os.Bundle; 
import android.preference.PreferenceActivity; 

public class SettingsActivity extends PreferenceActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 

     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 


    } 



} 

답변

0

한 가지 방법은 당신의 주요 활동에서, 주요 활동의 코드 변경됨 :

@Override 
protected void onResume() { 
    super.onResume(); 
    SharedPreferences preferences = 
     PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
    String nuevoIP = preferences.getString("prefIP", "127.0.0.1"); 
    int nuevoPuerto = Integer.parseInt(preferences.getString("prefPort", "1101")); 
    if (puerto != nuevoPuerto || !IP.equals(nuevoIP)) { 
     // IP and/or puerto have changed 
     IP = nuevoIP; 
     puerto = nuevoPuerto; 
     // close and reopen socket if appropriate 
    } 
} 

이것은 언제든지 호출됩니다. SettingsActivity에서 주 활동으로 돌아갑니다.

기본 활동을 일시 중지하지 않고 공유 환경 설정이 변경 될 수있는 경우 OnSharedPreferenceChangeListener을 공유 환경 설정에 등록하고 거기에서 위의 논리를 수행해야합니다. 따라서 청취자를 onPause()에 등록 취소하고 onResume()에 등록하는 것이 중요합니다. 일시 중지 된 상태에서 변경 사항을 수신하지 않았으므로 onResume()에서 위의 확인을 수행해야합니다.

+0

대단히 감사합니다! – Kydo2

관련 문제