2013-04-05 5 views
3

안녕하십니까, 도와 주셔서 감사합니다.내 PreferenceActivity 활동 양식에서 다른 메서드 호출

다음과 같은 경우가 있습니다.

내 앱에서는 PreferenceActivity를 사용하여 설정을 변경하고 표시 할 수 있습니다. PreferenceActivity으로 전화를 걸자.

사용자가 하나의 특정 환경 설정을 선택하면 새로운 활동이 시작되고 활동 B (A는 파괴되지 않음)이라고합시다. 내가해야 할 일은

는 양식 활동 B. 내부 PreferenceActivity를하는 방법을 호출하는 것입니다

참고 : PreferenceActivity를 A의 방법은 정적 될 수 없음.

도움을 주시면 감사하겠습니다.

편집 편집 편집 편집 편집 편집

이것은 Activty B가 시작되는 방법입니다 : 사용자가 PreferenceActivity를 A의 특파원 항목을 탭하면 의도가 트리거 화면. 대신 같은 활동을 시작

<PreferenceScreen 
     android:key="addstocks" 
     android:summary="Click here to add stocks" 
     android:title="Add stocks" > 
     <intent 
      android:targetClass="com.stocktickerwidget.QuotesActivity" 
      android:targetPackage="com.stocktickerwidget" /> 
+1

메서드에 인수를 전달해야하며 메서드에서 호출자에게 결과를 반환해야합니까? 이 메소드를 호출하는 목표는 무엇입니까 (즉, 사용자가 액티비티 A로 돌아 왔을 때 다른 것을 보게되는 것일뿐)? – Karakuri

+0

@Karakuri 아무것도 전달할 필요가 없습니다. 활동 A는 해당 메소드의 호출로 인해 모양이 변경됩니다. –

+1

그런 경우'startActivityForResult()'를 사용하여 결과를 전달하고 onActivityResult()에서 모양을 변경하는 것이 좋습니다. 핸들러와 메신저를 잠재적으로 사용할 수는 있지만 처음에는 더 쉽고 명확합니다. – Karakuri

답변

2

수동으로 기본 설정 상 OnPreferenceClickListener을 설정하고 startActivityForResult()를 사용합니다.

private static final int RESUEST_CODE = 1; 
protected void onCreate() { 
    /* ... */ 
    Preference pref = getPreferenceManager().findPreference("addstocks"); 
    pref.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
     public boolean onPreferenceClick(Preference preference() { 
      if (preference.getKey().equals("addstocks") { 
       startActivityB(); 
       return true; 
      } 
      return false; 
     } 
    }); 
} 

private void startActivityB() { 
    Intent intent = new Intent(this, ActivityB.class); 
    startActivityForResult(intent, REQUEST_CODE); 
} 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { 
     // do something here 
    } 
} 
+0

감사합니다! 그게 문제를 해결했다! –