Handling bundles in activities and fragments

[원문] http://blog.petrnohejl.cz/handling-bundles-in-activities-and-fragments
Bundle 은 매우 유용 한 데이터 용기 로 String 값 과 각종 Parceable 을 매 핑 할 수 있 는 데이터 형식 입 니 다.그래서 대체적으로 Bundle 은 복잡 한 키 사전 입 니 다.Bundles 는 Intents / activities / Fragments 에서 값 을 전달 하 는 데 사 용 됩 니 다.다음은 안 드 로 이 드 에서 Bundles 를 어떻게 사용 하 는 지 에 대해 논의 할 것 이다.
Activity
Intent 를 사용 하여 Activity 를 만 들 때 추가 데 이 터 를 전달 할 수 있 습 니 다.데 이 터 는 Bundle 에 저장 되 어 있 으 며, getIntent (). getExtras () 방법 을 호출 하여 얻 을 수 있 습 니 다.Activity 를 위해 new Intent () 정적 방법 을 실현 하 는 좋 은 습관 이 있 습 니 다. 이 방법 은 이 Activity 를 만 드 는 Intent 를 되 돌려 줍 니 다.이 방식 을 통 해 Activity 에 전 달 된 매개 변수 변 수 를 컴 파일 단계 에서 검사 할 수 있 습 니 다. 마찬가지 로 이 방식 도 Service 와 Broadcast 에 사 용 됩 니 다.
Bundle 은 Activity 가 다시 초기 화 될 때 도 마찬가지 로 현재 예제 의 상 태 를 유지 하 는 데 사 용 됩 니 다. 예 를 들 어 Activity 의 configuration 이 변 할 때 도 사 용 됩 니 다.onSave InstanceState (Bundle) 방법 에 데 이 터 를 넣 고 onCreate (Bundle) 나 onRestore InstanceState (Bundle) 방법 에서 이 데 이 터 를 얻 을 수 있 습 니 다.이 몇 가지 방법의 주요 차이 점 은 onRestore InstanceState (Bundle) 방법 이 onStart () 방법 이후 에 호출 된다 는 것 이다.
public class ExampleActivity extends Activity
{
    public static final String EXTRA_PRODUCT_ID = "product_id";
    public static final String EXTRA_PRODUCT_TITLE = "product_title";

    private static final String SAVED_PAGER_POSITION = "pager_position";

    public static Intent newIntent(Context context, String productId, String productTitle)
    {
        Intent intent = new Intent(context, ExampleActivity.class);

        // extras
        intent.putExtra(EXTRA_PRODUCT_ID, productId);
        intent.putExtra(EXTRA_PRODUCT_TITLE, productTitle);

        return intent;
    }

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example);

        // restore saved state
        if(savedInstanceState != null)
        {
            handleSavedInstanceState(savedInstanceState);
        }

        // handle intent extras
        Bundle extras = getIntent().getExtras();
        if(extras != null)
        {
            handleExtras(extras);
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState)
    {
        // save current instance state
        super.onSaveInstanceState(outState);

        // TODO
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState)
    {
        // restore saved state
        super.onRestoreInstanceState(savedInstanceState);

        if(savedInstanceState != null)
        {
            // TODO
        }
    }

    private void handleSavedInstanceState(Bundle savedInstanceState)
    {
        // TODO
    }

    private void handleExtras(Bundle extras)
    {
        // TODO
    }
}

Fragment
새 Fragment 인 스 턴 스 를 만 들 때 setArguments (Bundle) 방법 으로 인 자 를 전달 할 수 있 습 니 다.또한 getArguments () 방법 으로 인 자 를 얻 을 수 있 습 니 다.때때로 많은 매개 변수의 구조 함 수 를 초기 화 하 는 것 은 적절 하지 않 은 용법 일 수 있다.Fragment 인 스 턴 스 는 다시 생 성 될 수 있 습 니 다. 이 로 인해 데이터 가 손실 될 수 있 습 니 다. 추가 적 인 매개 변수 가 있 는 구조 함수 가 Fragment 를 다시 초기 화 할 때 호출 되 지 않 고 빈 구조 함수 만 호출 되 기 때 문 입 니 다.이 문 제 를 해결 하 는 가장 좋 은 방법 은 정적 구조 방법 인 new Instance () 를 실현 하 는 것 입 니 다. 이 방법 은 새로운 Fragment 인 스 턴 스 를 되 돌려 주 고 setArguments 방법 을 통 해 Fragment 의 인 자 를 설정 합 니 다.
Fragment 의 상 태 는 onSaveInstanceState (Bundle) 방법 으로 저장 할 수 있 습 니 다.이것 은 Activity 와 유사 하 다.데 이 터 는 onCreate (Bundle), onCreate View (LayoutInflater, ViewGroup, Bundle), onActivity Created (Bundle) 또는 onViewState Restored (Bundle) 방법 으로 복원 할 수 있 습 니 다.
Fragment 역시 Activity 예제 를 만 들 때 들 어 오 는 Intent 데 이 터 를 가 져 올 수 있 으 며, getActivity (). getIntent (). getExtras () 방법 으로 가 져 올 수 있 습 니 다.
public class ExampleFragment extends Fragment
{
    private static final String ARGUMENT_PRODUCT_ID = "product_id";

    private static final String SAVED_LIST_POSITION = "list_position";

    public static ExampleFragment newInstance(String productId)
    {
        ExampleFragment fragment = new ExampleFragment();

        // arguments
        Bundle arguments = new Bundle();
        arguments.putString(ARGUMENT_PRODUCT_ID, productId);
        fragment.setArguments(arguments);

        return fragment;
    }

    public ExampleFragment() {}

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        // handle fragment arguments
        Bundle arguments = getArguments();
        if(arguments != null)
        {
            handleArguments(arguments);
        }

        // restore saved state
        if(savedInstanceState != null)
        {
            handleSavedInstanceState(savedInstanceState);
        }

        // handle intent extras
        Bundle extras = getActivity().getIntent().getExtras();
        if(extras != null)
        {
            handleExtras(extras);
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState)
    {
        // save current instance state
        super.onSaveInstanceState(outState);

        // TODO
    }

    private void handleArguments(Bundle arguments)
    {
        // TODO
    }

    private void handleSavedInstanceState(Bundle savedInstanceState)
    {
        // TODO
    }

    private void handleExtras(Bundle extras)
    {
        // TODO
    }
}

You can find example code also on my GitHub in Android Templates and Utilities repo. This blogpost was inspired by Nick Butcher's post on Google Plus. Gotta some questions or ideas about Bundles? Follow me on Twitter or Google Plus.

좋은 웹페이지 즐겨찾기