2014-07-22 6 views
0

조각의 기본 개념을 이해하기 위해 안드로이드 응용 프로그램을 만들려고했습니다. 하지만 조각을 보여 주거나 숨길 수는 없습니다.
여기 조각보기/가리기가 전혀 작동하지 않습니다

final FragmentManager fragmentManager = getFragmentManager(); 

b.setOnClickListener(new View.OnClickListener() { 

    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    public void onClick(View v) { 
     FragmentTransaction ft = fragmentManager.beginTransaction(); 

     PM_Fragment pm_fragment = new PM_Fragment(); 
     ft.replace(android.R.id.content, pm_fragment); 

     if (pm_fragment.isHidden()) { 
      fragmentManager.beginTransaction() 
        .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out) 
        .show(pm_fragment) 
        .commit(); 

      b.setText("Hide"); 
     } else { 
      fragmentManager.beginTransaction() 
        .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out) 
        .hide(pm_fragment) 
        .commit(); 
      b.setText("Show"); 
     } 
    } 
}); 

조각은 단순히 내 경우에는 텍스트 라인 onClickListner

내 코드입니다. 그리고 버튼의 역할은 프래그먼트의 가시성을 토글하는 것입니다. 아무도이 코드의 잘못된 점을 말해 줄 수 있습니까?
그리고 작동하지 않으면 단추를 두드리면 아무 것도하지 않는다는 것을 의미합니다. 텍스트를 "숨기기"에서 "표시"로 변경하고 이후에 몇 번이나 탭해도 "표시"가 유지됩니다. 그리고이 과정은 조각의 행동에 전혀 영향을 미치지 않습니다.

답변

1

나는 당신이 여기에서하려고하는 것을 정말로 이해하지 못하지만 ft을 절대 쓰지 않으므로 Fragment은 결코 Activity에 추가되지 않습니다. 나는 또한이 내부 FragmentTransaction의 목적을 이해하지 않는다, 그러나 당신이하지이 전혀 필요하십니까 말을 저장할 수 있습니다 ...

전 세계적으로이 정의 :

private PM_Fragment pmFragment = new PM_Fragment(); 

을 그리고 당신의 OnClickListener은 다음과 같아야합니다

b.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction ft = fragmentManager.beginTransaction(); 
     ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); 

     if(pmFragment.isAdded()) { 
      ft.remove(pmFragment); 
     } else { 
      ft.replace(android.R.id.content, pmFragment); 
     } 

     ft.commit(); 
    } 
}); 

중요을 : FragmentTransactions가 작동하려면 Fragment가 될 가지고있다 코드에 추가 된 en! XML에 추가하면 FragmentTransactions의 영향을받을 수 없습니다! 이처럼 Fragment 추가한다면 :

<fragment 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:name="at.example.fragments.SomeFragment" /> 

아니면이 문제의 적어도 일부임을 확신보다 다른 유사한 방법으로

. 이 같은 코드에 전적으로 귀하의 Fragment을 추가해야

<FrameLayout 
    android:id="@+id/flFragmentContainer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

는 그것은 Fragment 당신이 원하는에 대한 컨테이너 역할을합니다 :

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState == null) { 
     SomeFragment fragment = SomeFragment.newInstance(); 

     FragmentManager manager = getSupportFragmentManager(); 
     FragmentTransaction transaction = manager.beginTransaction(); 
     transaction.replace(R.id.flFragmentContainer, fragment); 
     transaction.commit(); 
    } 
} 

그냥 레이아웃에 이런 식으로 <fragment /> 태그를 교체 추가 할. 위의 FragmentTransaction을 사용하여 Fragment을이 FrameLayout에 추가 할 수 있습니다.

+0

질문을 편집했습니다. 도움이되는지 확인하십시오. –

+0

무엇을 도와 드릴까요? –

+0

그리고 기존 답변에서, 당신은 활동에 단편을 추가하고있는 것처럼 보입니다. 하지만 그 부분은 제 일에 잘 작동합니다. 버튼 누르기에 대한 가시성을 전환해야합니다. –

관련 문제