2011-12-01 7 views
6

내 모든 활동에서 볼 수있는 뮤직 플레이어를 만들려고합니다. 이렇게하기 위해, 나는 당신이 이전에 조언 한 사람 중 한 명으로 Fragment을 사용할 것입니다.팽창 후 조각이 보이지 않음 [고정되었지만 ...]

나는 Fragments에 대한 경험이 없기 때문에 먼저 필러 활동을 구현하기로 결정했습니다. 버튼과 텍스트가 포함 된 간단한 단편을 작성한 후 필자 활동에서이를 부풀려보십시오.

그러나 팽창 후이 조각은 나타나지 않습니다. LogCat에 프래그먼트가 팽창되었음을 알리는 메시지가 인쇄됩니다.

나는 뭔가를 놓쳤다는 것을 확신하지만, 이것에 대한 경험이 없으며이를 수행하는 방법을 설명하는 튜토리얼을 찾을 수 없기 때문에 나는 그것이 무엇인지, 실종.

음악 플레이어 조각

public class AppMusicPlayer extends Fragment{ 


    @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      // Inflate the layout for this fragment 
     System.out.println("fragment added"); 
      return inflater.inflate(R.layout.musicplayer_main, container, false); 
     } 


} 

음악 플레이어 레이아웃

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 


    <Button 
     android:id="@+id/button1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="This is the fragment you're looking for" /> 

</LinearLayout> 

필러 활동

public class Filler extends FragmentActivity { 

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

     Button b = (Button) findViewById(R.id.terug); 
     b.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
       Intent intent = new Intent(); 
       setResult(RESULT_OK, intent); 
       finish(); 
      } 
     }); 

    } 

} 
뭔가 잘못하지만, 무엇을하고있어 분명히

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
<!-- Title bar --> 
    <RelativeLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true" 
     android:background="@drawable/title_bar" > 

     <TextView 
      android:id="@+id/fillertitle" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:text="Work In Progress" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:textStyle="bold" > 
     </TextView> 

     <Button 
      android:id="@+id/terug" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:layout_centerVertical="true" 
      android:background="@drawable/button_back" 
      android:text="Back" 
      android:textColor="#FFFFFFFF" 
      android:textStyle="bold" > 
     </Button> 
    </RelativeLayout> 
<!-- End of title bar --> 
    <TextView 
     android:id="@+id/wip" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="This section of the app has not been made yet. Work in progress." > 
    </TextView> 

    <fragment 
     android:id="@+id/musicPlayerFragment" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:name="com.mobowski.app.player.AppMusicPlayer" /> 

</LinearLayout> 

210 필러 레이아웃?

참고 : 나는 Compatibility 라이브러리와 함께 Android 2.3을 사용하고 있습니다.

어떤 도움이 문제 Yashwanth 쿠마 및 blessenm의 도움으로 고정 된


을 알 수있다. 하나는 XML 솔루션을, 다른 하나는 프로그램 방식의 솔루션을 제공했습니다. 이제는 어떤 솔루션이 가장 바람직한 것인지 궁금합니다. 솔루션 중 하나를 사용하여 양보해야 할 사항이 있습니까? 아니면 모두 프로그래머가 선호하는 솔루션으로 귀결됩니까?

+1

특정 '단편'만 사용하고 절대로 변경하지 않으려한다면 xml 방식이 바람직 할 것입니다. 앱이 실행 중일 때'Fragments'를 스왑하려는 경우 - 프로그램 적으로'Fragment'를 추가하면 플로우를 제어하는 ​​것이 바람직 할 수 있습니다 (예 :'Fragment'가 표시되고 어느 것이 바뀌는 지 알 것입니다). – kaspermoerch

+0

좋아, 나는 XML에 충실 할 것이다. (적어도 현재는) 뮤직 플레이어가 유일한 '조각'이 될 것이다. 답변 해 주셔서 감사합니다. –

답변

9

XML에 직접 조각을 추가하지 않았습니다. 하지만 필자가 일반적으로하는 일은 필러 레이아웃에 framelayout 또는 linearlayout을 추가하는 것입니다.

해당 ID가 'fragment_holder'라고 가정합니다. setContentView 바로 다음에있는 조각 활동에서 다음 코드를 사용합니다. 시도해보십시오

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.add(R.id.fragment_holder,new AppMusicPlayer(),"musicplayer"); 
ft.commit(); 
+0

소원 나는 Yashwanth 's뿐만 아니라 당신의 대답을 받아 들일 수 있었다. 두 답변 모두 완벽하게 작동했습니다. 이제는 XML에서 추가하거나 프로그래밍 방식으로 추가하는 "더 나은"선택이 궁금합니다. 거기에 어떤 규칙이 있습니까? –

+0

yashwanths가 정답이었습니다. 내 것은 단지 대안 일뿐입니다. – blessenm

+0

내 주변의 대답이 바뀌 었습니다. 프래그먼트를 골라 내고 난 후, 프레임 레이 아웃에 성공적으로 추가 할 수 없었지만 메서드가 완벽하게 작동했습니다. 다시 고마워. –

7

당신은 layout_height를 0dip으로 언급하고 수직 선형 레이아웃의 너비는 언급하지 말아야합니다.

변경해야합니다.

<fragment 
     android:id="@+id/musicPlayerFragment" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:name="com.mobowski.app.player.AppMusicPlayer" /> 
+0

소원 나는 Blessen 's뿐만 아니라 당신의 대답을 받아 들일 수 있었다. 두 답변 모두 완벽하게 작동했습니다. 이제는 XML에서 추가하거나 프로그래밍 방식으로 추가하는 "더 나은"선택이 궁금합니다. 거기에 어떤 규칙이 있습니까? –