Фрагмент не отображается после раздувания [Исправлено, но ...]

StackOverflow https://stackoverflow.com/questions/8340228

  •  26-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь создать музыкальный проигрыватель, который будет виден во всех моих действиях.Чтобы сделать это, я собираюсь использовать 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>

Очевидно, я делаю что-то не так, но что?

Примечание: Я использую Android 2.3 с библиотекой совместимости.

Любая помощь приветствуется


Проблема была исправлена с помощью Яшванта Кумара и Блессенма.Один из них предоставлял XML-решение, другой - программное решение.Теперь мне просто интересно, какое решение является наиболее желательным.Можно ли пойти на какие-либо уступки в отношении любого из этих решений, или все сводится к предпочтительному решению программиста?

Это было полезно?

Решение

Я не пробовал добавлять фрагменты непосредственно в xml.Но что я обычно делаю, так это добавляю framelayout или linearlayout к макету заполнителя.

Предположим, его идентификатор - "fragment_holder".Я использую следующий код в действии fragment сразу после setContentView.Попробуй это

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

Другие советы

вы должны указать 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" />
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top