it-source

단편에 비해 몇 가지 활동이 있습니까?

criticalcode 2023. 8. 19. 10:26
반응형

단편에 비해 몇 가지 활동이 있습니까?

소개:

기본적인 "Fragments Tutorial" 패턴은 다음과 같습니다.

  1. 태블릿의 왼쪽에는 목록이 있고, 오른쪽에는 세부사항이 있습니다.
  2. 다 둘다입니다.Fragments그리고 둘 다 같은 곳에 거주합니다.Activity.
  3. 합니다.Fragment일체가 되어Activity.
  4. 로새 ActivityFragment.

(예: Dianne Hackborn의 Android 3.0 Fragments APIFragments API 가이드)

은 두장모기은에 .Fragments (소리)

태블릿에서는 전체 앱이 1개이고, 전화에서는 많은 앱이 있습니다.


질문:

  • 을 여러 개로 가 있나요?Activities?

이 방법의 한 가지 문제는 기본 Tablet에서 많은 논리를 복제한다는 것입니다.Activity 그고별전에서기화의도리.Activities.

  • 논리를 하여 1 Activity 이 더 요?Fragments입력 및 출력(다른 레이아웃 사용)?

는 이한방로논리는의에 .Fragments그들 자신, 그리고 단 한 명만이 있습니다.Activity코드 중복 감소

또한 ▁the에 대해 .ActionBarSherlock가장 잘 작동하는 것 같다는 것입니다.FragmentsActivities(아직 작업하지 않았습니다.)

튜토리얼이 지나치게 단순화되었습니까, 아니면 이 접근 방식에서 주요 내용을 누락했습니까?


우리는 사무실에서 두 가지 접근법을 모두 성공적으로 시도했지만, 저는 이제 곧 더 큰 프로젝트를 시작할 것이며, 가능한 한 저 자신을 위해 일을 쉽게 하고 싶습니다.

관련 질문에 대한 일부 링크:


업데이트

질문에 대한 현상금 지급 시작 - 태블릿 활동과 각 전화 활동에서 앱 로직을 복제해야 하는 이유에 대해 여전히 확신하지 못합니다.

Square 직원들의 흥미로운 기사도 찾았는데, 이 기사는 읽을 가치가 충분히 있습니다.

저는 튜토리얼이 매우 단순하다는 것에 동의합니다.그들은 그냥 소개합니다.Fragments하지만 저는 제안된 패턴에 동의하지 않습니다.

또한 많은 활동에서 앱의 논리를 복제하는 것이 좋지 않다는 것에 동의합니다(위키백과의 DRY 원칙 참조).


나는 사용하는 패턴을 선호합니다.ActionBarSherlock데모 앱(여기서 다운로드하고 여기서 소스 코드)을 조각화합니다.질문에 언급된 튜토리얼과 가장 밀접하게 일치하는 데모는 앱의 "레이아웃"이라고 불리는 데모입니다.FragmentLayoutSupport소스 코드에 있습니다.

에서는 이데모에서는논다단이계습다니었동에서 논리가 되었습니다.Activity 리고안으로그에.Fragment.TitlesFragment실제로는 Fragments를 변경하기 위한 로직이 포함되어 있습니다.이런 식으로 각 활동은 매우 간단합니다.활동 내부에 논리가 없는 매우 단순한 활동을 많이 복제하면 매우 간단합니다.

논리를 Fragments에 넣으면 코드를 두 번 이상 작성할 필요가 없습니다. Fragment가 어떤 활동에 포함되는지에 상관없이 코드를 사용할 수 있습니다.따라서 기본 자습서에서 제안하는 패턴보다 더 강력한 패턴이 됩니다.

    /**
    * Helper function to show the details of a selected item, either by
    * displaying a fragment in-place in the current UI, or starting a
    * whole new activity in which it is displayed.
    */
    void showDetails(int index)
    {
        mCurCheckPosition = index;

        if (mDualPane)
        {
            // We can display everything in-place with fragments, so update
            // the list to highlight the selected item and show the data.
            getListView().setItemChecked(index, true);

            // Check what fragment is currently shown, replace if needed.
            DetailsFragment details = (DetailsFragment) getFragmentManager()
                .findFragmentById(R.id.details);
            if (details == null || details.getShownIndex() != index)
            {
                // Make new fragment to show this selection.
                details = DetailsFragment.newInstance(index);

                // Execute a transaction, replacing any existing fragment
                // with this one inside the frame.
                FragmentTransaction ft = getFragmentManager()
                    .beginTransaction();
                ft.replace(R.id.details, details);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.commit();
            }

        }
        else
        {
            // Otherwise we need to launch a new activity to display
            // the dialog fragment with selected text.
            Intent intent = new Intent();
            intent.setClass(getActivity(), DetailsActivity.class);
            intent.putExtra("index", index);
            startActivity(intent);
        }
    }

ABS 패턴의 또 다른 장점은 많은 논리가 포함된 태블릿 활동을 하지 않는다는 것이며, 이는 메모리를 절약한다는 것을 의미합니다.튜토리얼 패턴은 더 복잡한 앱에서 매우 큰 주요 활동으로 이어질 수 있습니다. 왜냐하면 언제든지 배치되는 모든 조각의 논리를 처리해야 하기 때문입니다.

전반적으로, 많은 활동을 강요받는다고 생각하지 마세요.코드를 여러 조각으로 분할할 수 있는 기회가 있다고 생각하고 사용할 때 메모리를 절약합니다.

당신은 올바른 방향으로 가고 있다고 생각합니다. (그리고 네, 튜토리얼은 너무 단순합니다.)

태블릿 레이아웃에서 단일 활동을 사용하고 조각을 여러 개의 '창'으로 전환할 수 있습니다.전화기 레이아웃에서 각 조각에 대해 새 활동을 사용할 수 있습니다.

이와 같은 경우:

enter image description here

추가 작업이 많아 보이지만 전화기에 여러 활동을 사용하면 기본 활동 수명 주기 및 의도 전달을 사용할 수 있습니다.이를 통해 프레임워크는 모든 애니메이션과 백스택을 처리할 수 있습니다.

코드를 줄이는 데 도움이 되도록 사용할 수 있습니다.BaseActivity그리고 그것으로부터 뻗어나갑니다.

그래서 사용자가 태블릿을 가지고 있다면 사용할 것입니다.MyMultiPaneFragActivity아니면 비슷한 것.하고 fragment의 fragment(예: 검색 의도 fragment의 fragment를 역할을 합니다.

없는 할 수 .MyBaseSingleFragActivity아니면 비슷한 것.이러한 활동은 5-10줄의 코드로 매우 단순할 수 있습니다(아마도 더 적을 수 있습니다).

까다로운 부분은 의도를 라우팅하는 것과 그렇지 않은 것입니다.*(편집: 자세한 내용은 아래 참조).

이 방법이 권장되는 이유는 메모리를 절약하고 복잡성과 결합을 줄이기 위해서라고 생각합니다.Fragments를 Fragments는 .FragmentManager에서는 백스택에 대한 해당 Fragment에 대한 참조를 유지합니다.또한 사용자가 '실행'해야 하는 작업을 단순화합니다.또한 이 설정은 단편의 보기, 레이아웃 및 논리를 활동 수명 주기와 분리합니다.이런 방식으로 조각은 단일 활동, 다른 조각(2-창) 또는 3-창 활동 등에 존재할 수 있습니다.

*정기적인 의도 라우팅을 통해 얻을 수 있는 이점 중 하나는 백스택의 모든 위치에서 활동을 명시적으로 시작할 수 있다는 것입니다.하나의 예는 검색 결과의 경우일 수 있습니다. (MySearchResults.class)

자세한 내용은 여기를 참조하십시오.

http://android-developers.blogspot.com/2011/09/preparing-for-handsets.html

각 단편은 개별 활동에서 잘 작동해야 하기 때문에 조금 더 초기 작업일 수도 있지만, 대개는 성과가 있습니다.즉, 다른 조각 조합을 정의하고, 조각 코드를 모듈식으로 유지하며, 작업 표시줄 관리를 단순화하고, 시스템이 모든 백스택 작업을 처리하도록 하는 대체 레이아웃 파일을 사용할 수 있습니다.

다음은 Udacity의 Android Fundamentals 과정 동영상에서 가져온 동일한 내용에 대한 레토 마이어의 답변입니다.

앱을 다른 활동으로 나누는 것이 더 나은 이유는 여러 가지가 있습니다.

  • 단일 단일 작업을 수행하면 코드의 복잡성이 증가하여 읽기, 테스트 및 유지 관리가 어려워집니다.
  • 의도 필터를 만들고 관리하는 것을 훨씬 더 어렵게 만듭니다.
  • 독립적인 구성 요소를 단단히 결합할 위험이 증가합니다.
  • 단일 활동에 중요한 정보와 안전하게 공유할 수 있는 정보가 모두 포함된 경우 보안 위험이 발생할 가능성이 훨씬 높아집니다.

경험의 법칙은 상황이 바뀔 때마다 새로운 활동을 만드는 것입니다.예를 들어, 다른 종류의 데이터를 표시하고 데이터 보기에서 입력으로 전환합니다.

이 방법의 한 가지 문제는 기본 태블릿 활동과 별도의 전화 활동에서 많은 논리를 복제한다는 것입니다.

마스터-세부 패턴에는 두 가지 활동이 있습니다.하나는 큰 화면의 조각과 작은 화면의 "마스터" 조각을 모두 보여줍니다.다른 하나는 작은 화면에 "세부" 조각을 보여줍니다.

당신의 세부 논리는 세부 조각에 묶여 있어야 합니다.. 은 단지 조각을하고, 따서간, 활세로관의 할 뿐입니다. 세부 활동은 단지 세부 조각을 표시할 뿐이며, 아마도 데이터를 전달할 수 있습니다.Intent

또한 ActionBarSherlock에 대해 읽은 내용은 Activities 대신 Fragments와 함께 사용하는 것이 가장 잘 작동하는 것 같다는 것입니다(그러나 저는 아직 작업하지 않았습니다).

ActionBarSherlock은 순수하게 기본 수행 표시줄의 백포트이기 때문에 기본 수행 표시줄과 마찬가지로 fragment와 더 이상 관련이는 ActionBarSherlock이 기본 수행 표시줄의 백포트이기 때문입니다.

"전화 앱을 많은 활동으로 나눌 이유가 있습니까?"라는 첫 번째 질문을 참조하면 - 네, 사용 가능한 공간으로 요약하면 태블릿은 개발자에게 더 많은 공간을 제공하므로 개발자가 한 화면에 더 많은 작업을 수행할 수 있습니다.Android는 Activities가 화면을 제공할 수 있음을 알려줍니다.그래서 태블릿에 있는 하나의 큰 화면으로 할 수 있는 것은 전화기의 여러 화면에 분산되어야 하는 것입니다. 왜냐하면 모든 조각들을 위한 공간이 충분하지 않기 때문입니다.

언급URL : https://stackoverflow.com/questions/12363790/how-many-activities-vs-fragments

반응형