2014-12-19 7 views
0

공유 환경 설정을 참조하면서 백그라운드 이미지를 동적으로 변경하려는 일부 코드로 작업하고 있습니다. 내가 가지고있는 활동의 예는 이것이다 :어떻게 안드로이드에서 다른 클래스의 클래스의 배경/레이아웃을 설정합니까?

public class Splash extends Activity { 
    protected void onCreate(Bundle inputVariableToSendToSuperClass) { 

     super.onCreate(inputVariableToSendToSuperClass); 
     setContentView(R.layout.splash); 
     Initialize(); 

     //Setting background 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
     String user_choice = prefs.getString("pref_background_choice","blue_glass"); 
     LinearLayout layout = (LinearLayout) findViewById(R.id.activity_splash_layout); 
     ManagePreferences mp = new ManagePreferences(); 
     mp.setTheBackground(Splash.this, user_choice, layout); 

     //More code after this... 
    } 
} 

ManagePreferences 클래스는 다음과 같습니다

public class ManagePreferences { 

    //Empty Constructor 
    public ManagePreferences(){ 
    } 

    public void setTheBackground(Context context, String background_choice, LinearLayout layout){ 
     if (background_choice == "blue_glass"){ 
      layout.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.blue_glass)); 
     } else if (background_choice == "blue_oil_painting") 


      //etc... with more backgrounds 
     } 
} 

문제는이 배경을 설정하는 코드가 다른 클래스에서 작동하지 않습니다. 코드를 Splash 액티비티에 복사하면 코드를 가져올 수 있지만 클래스를 참조하고 메서드를 호출하면 코드가 작동하지 않습니다. 나는 내 코드를 어지럽히 지 않는 것을 선호한다.

저는이 ManagePreferences 클래스를 호출하여 스플래시 활동의 레이아웃 (setBackgroundDrawable)을 변경하려고합니다.

감사합니다.

+0

답을 업데이트했습니다. 도움이 되었습니까? 아니면 내가 너를 오해하고 있니? – Suvitruf

답변

2

1) 잘못하고 있습니다. new을 사용하여 Activity을 직접 생성해서는 안됩니다.

2) Intent을 사용하여 새 활동을 열고 여기에 인수를 설정해야합니다.

Bundle extras = getIntent().getExtras(); 
if (extras != null) { 
    String user_choice = extras.getString("user_choice"); 
} 

UPD :

public static void setTheBackground(Context context, String background_choice, LinearLayout layout){ 
     if (background_choice == "blue_glass"){ 
      layout.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.blue_glass)); 
     } else if (background_choice == "blue_oil_painting") 


      //etc... with more backgrounds 
     } 
     layout.requestLayout(); 
    } 

과 전화 : 그냥 유틸리티 클래스처럼 ManagePreferences를 사용하는 경우, setTheBackground을 고정 할

Intent intent = new Intent(context, ManagePreferences.class); 
intent.putExtra("user_choice", user_choice); 
startActivity(intent); 

그리고 ManagePreferences에 그것을 얻을

ManagePreferences.setTheBackground(this, user_choice, layout); 

UPD :으로 대답하면 here으로 처리 할 수 ​​없습니다. findViewById()을 사용하여 레이아웃 파일을 참조하면 Android 시스템에서 현재 ContentView에서만이 파일을 찾습니다. (즉, 현재 활동에 대해 setContentView()을 사용하여 설정 한보기).

+0

당신은 의도를 통해 데이터를 전달하는 것과 관련하여 확실히 맞습니다. 문제는 다른 클래스를 열지 않고 있다는 것입니다. ManagePreferences 활동은 결코 클래스로 열리지 않습니다. 나는 단순히 그것을 사용하려고하기 때문에 if 문을 실행하여 그림을 그려야 만 배경 이미지를 설정할 수있다. layout.setBackgroundDrawable() 메소드를 처음에 호출 한 클래스를 참조 할 수있는 방법을 찾으려고합니다. 기본적으로 ManagePreferences 클래스는 실제로 그것을 호출하는 클래스의 레이아웃을 설정합니다 – Silmarilos

+0

@Silmarilos 저는 왜 당신이 Activity를 사용하고 있는지 절대 이해하지 못합니다 =/ – Suvitruf

+0

ManagePreferences 클래스가 아니라는 것을 보여주기 위해 질문을 업데이트했습니다. 활동. 그게 도움이 될까요? 나는 액티비티를 열려고하지 않고, 스플래시 클래스의 레이아웃을 변경하기 위해 ManagePreferences 클래스를 사용하려고 시도하고있다. – Silmarilos