Android에서 조각 숨기기 표시 LinearLayout layout;

2 개의 조각이 포함 된 응용 프로그램을 개발 중이며 필요에 따라 숨기기를 표시하고 싶습니다. 다음 코드에는 내 문제에 대한 간단한 예가 있습니다. 이 간단한 Fragmentactivity에는 버튼 1 개와 listfragment 1 개가 있습니다.

이 간단한 예제는 완벽하게 작동합니다. 그러나 나는 show hide 조각에 만족하지 않습니다. layout.setVisibility (View.GONE); 코드에서 ft.hide (f); 조각을 숨기지 않습니다. 사실 우리는 조각을 숨기지 않고 컨테이너를 숨기고 있습니다.

내 질문은, 이것이 조각 숨기기를 표시하는 방법입니까? 그렇지 않다면 많은 사람들이이 문제에 직면하고 있기 때문에 프래그먼트를 숨기고 표시하는 방법을 테스트 한 예제로 설명하십시오.

 public class MainActivity extends FragmentActivity implements OnClickListener {

        Fragment1 f;
        Button b;
        LinearLayout layout;
        Fragment myf;
        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            b = (Button) findViewById(R.id.button1);
            layout = (LinearLayout) findViewById(R.id.ll);
            f = new Fragment1();
        }

        @Override
        public void onClick(View v) {

            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);

            if (f.isHidden()) {
                ft.show(f);
                layout.setVisibility(View.VISIBLE);
                b.setText("Hide");
            } else {
                ft.hide(f);
                b.setText("Show");
                layout.setVisibility(View.GONE);
            }
            ft.commit();
            // TODO Auto-generated method stub
        }


답변

컨테이너의 가시성 플래그를 엉망으로 만들지 마십시오. FragmentTransaction.hide / show가 내부적으로 수행합니다.

따라서이를 수행하는 올바른 방법은 다음과 같습니다.

FragmentManager fm = getFragmentManager();
fm.beginTransaction()
          .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
          .show(somefrag)
          .commit();

또는 android.support.v4.app.Fragment를 사용하는 경우

 FragmentManager fm = getSupportFragmentManager();
 fm.beginTransaction()
          .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
          .show(somefrag)
          .commit();

답변

또한 Fragment에서 수행 할 수 있습니다 (예 : 서버 데이터 가져 오기 실패시).

 getView().setVisibility(View.GONE);

답변

안녕하세요,이 접근 방식을 사용하면 모든 조각이 처음에 추가되면 컨테이너에 남아 있으며 원하는 조각을 표시하고 다른 조각은 컨테이너 내에 숨 깁니다.

// Within an activity
private FragmentA fragmentA;
private FragmentB fragmentB;
private FragmentC fragmentC;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState == null) {
        fragmentA = FragmentA.newInstance("foo");
        fragmentB = FragmentB.newInstance("bar");
        fragmentC = FragmentC.newInstance("baz");
    }
}


// Replace the switch method
protected void displayFragmentA() {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    if (fragmentA.isAdded()) { // if the fragment is already in container
        ft.show(fragmentA);
    } else { // fragment needs to be added to frame container
        ft.add(R.id.flContainer, fragmentA, "A");
    }
    // Hide fragment B
    if (fragmentB.isAdded()) { ft.hide(fragmentB); }
    // Hide fragment C
    if (fragmentC.isAdded()) { ft.hide(fragmentC); }
    // Commit changes
    ft.commit();
}

자세한 내용은 https://github.com/codepath/android_guides/wiki/Creating-and-Using-Fragments 를 참조 하세요 . 누군가를 도울 수 있기를 바랍니다. 이것은 오래된 질문이더라도.


답변

public void showHideFragment(final Fragment fragment){

    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.setCustomAnimations(android.R.animator.fade_in,
                    android.R.animator.fade_out);

    if (fragment.isHidden()) {
        ft.show(fragment);
        Log.d("hidden","Show");
    } else {
        ft.hide(fragment);
        Log.d("Shown","Hide");
    }

    ft.commit();
}

답변

이 시도:

MapFragment mapFragment = (MapFragment)getFragmentManager().findFragmentById(R.id.mapview);
mapFragment.getView().setVisibility(View.GONE);

답변

내 코드에서 위의 솔루션과 비교할 때 가장 간단한 방법은 조각을 포함하는 레이아웃을 정의하는 것입니다. 그런 다음 일반적인보기 방식과 일치하는 레이아웃 속성을 제어하여 조각을 숨기거나 숨김 해제 할 수 있습니다. 이 경우 추가 코드가 필요하지 않으며 조각의 추가 배포 속성을 외부 레이아웃으로 이동할 수 있습니다.

<LinearLayout style="@style/StHorizontalLinearView"
    >

    <fragment
        android:layout_width="match_parent"
        android:layout_height="390dp"
        android:layout_alignParentTop="true"
        />

</LinearLayout>

답변

이것은 나를 위해 일했습니다.

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        if(tag.equalsIgnoreCase("dashboard")){

            DashboardFragment dashboardFragment = (DashboardFragment)
                    fragmentManager.findFragmentByTag("dashboard");
            if(dashboardFragment!=null) ft.show(dashboardFragment);

            ShowcaseFragment showcaseFragment = (ShowcaseFragment)
                    fragmentManager.findFragmentByTag("showcase");
            if(showcaseFragment!=null) ft.hide(showcaseFragment);

        } else if(tag.equalsIgnoreCase("showcase")){
            DashboardFragment dashboardFragment = (DashboardFragment)
                    fragmentManager.findFragmentByTag("dashboard");
            if(dashboardFragment!=null) ft.hide(dashboardFragment);

            ShowcaseFragment showcaseFragment = (ShowcaseFragment)
                    fragmentManager.findFragmentByTag("showcase");
            if(showcaseFragment!=null) ft.show(showcaseFragment);
        }

        ft.commit();