Android:getview.findviewbyid上的片段错误?

Android:getview.findviewbyid上的片段错误?,android,view,fragment,Android,View,Fragment,我正在开发片段音乐播放器的应用程序。在这里,当我使用代码从XML获取视图时,它停止了工作 我的xml代码是 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayoutMusicList" android:layout_width="match

我正在开发片段音乐播放器的应用程序。在这里,当我使用代码从XML获取视图时,它停止了工作

我的xml代码是

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayoutMusicList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal"
    android:background="@drawable/default_album_art_thumb"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listViewMusic"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="@android:color/transparent" />

    <LinearLayout
        android:id="@+id/linearLayoutPlayingSong"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/transparent"
        android:gravity="center"
        android:orientation="vertical" >

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@android:color/darker_gray" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|bottom"
            android:orientation="horizontal" >

            <ImageView
                android:id="@+id/imageViewAlbumArt"
                android:layout_width="@dimen/small_image_art_width"
                android:layout_height="@dimen/small_image_art_width" />

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/textNowPlaying"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:ellipsize="marquee"
                    android:gravity="center_horizontal"
                    android:marqueeRepeatLimit="marquee_forever"
                    android:singleLine="true"
                    android:text="@string/empty_text"
                    android:textColor="@color/white"
                    android:textSize="15dp" />

                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal"
                    android:orientation="horizontal" >

                    <Button
                        android:id="@+id/btnPrevious"
                        android:layout_width="@dimen/small_button_width"
                        android:layout_height="@dimen/small_button_width"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="10dp"
                        android:background="@drawable/ic_action_previous" />

                    <Button
                        android:id="@+id/btnPlay"
                        android:layout_width="@dimen/small_button_width"
                        android:layout_height="@dimen/small_button_width"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="10dp"
                        android:background="@drawable/ic_action_play"
                        android:visibility="gone" />

                    <Button
                        android:id="@+id/btnPause"
                        android:layout_width="@dimen/small_button_width"
                        android:layout_height="@dimen/small_button_width"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="10dp"
                        android:background="@drawable/ic_action_pause" />

                    <Button
                        android:id="@+id/btnStop"
                        android:layout_width="@dimen/small_button_width"
                        android:layout_height="@dimen/small_button_width"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="10dp"
                        android:background="@drawable/ic_action_stop" />

                    <Button
                        android:id="@+id/btnNext"
                        android:layout_width="@dimen/small_button_width"
                        android:layout_height="@dimen/small_button_width"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="10dp"
                        android:background="@drawable/ic_action_next" />

                    <Button
                        android:id="@+id/btnMusicPlayer"
                        android:layout_width="@dimen/small_button_width"
                        android:layout_height="@dimen/small_button_width"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="10dp"
                        android:background="@drawable/ic_music" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:layout_marginRight="10dp"
                    android:orientation="horizontal" >

                    <TextView
                        android:id="@+id/textBufferDuration"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:textColor="@color/white" />

                    <TextView
                        android:id="@+id/textDuration"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="right"
                        android:textColor="@color/white" />
                </LinearLayout>

                <ProgressBar
                    android:id="@+id/progressBar"
                    style="?android:attr/progressBarStyleHorizontal"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="1dp"
                    android:layout_marginLeft="10dp"
                    android:layout_marginRight="10dp" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

有人能帮我找到解决这个错误的方法吗。。谢谢……

您正在创建视图之前调用getView方法。在onViewCreated中移动init方法。

您的fragment getView方法将为null,因为OnCreate上的视图在初始化这些视图之前不会返回到activity

首先将视图对象传递给init函数

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.device_activity_main, container, false);
        context = Device_Main.this.getActivity();
        init(view);
        return view;
    }
现在将视图对象从init函数传递给getViews方法

private void init(View view) {
        getViews(view);
        setListeners();
        playingSong.setSelected(true);
        progressBar.getProgressDrawable().setColorFilter(getResources().getColor(R.color.orange), PorterDuff.Mode.SRC_IN);
        if(Device_PlayerConstants.SONGS_LIST.size() <= 0){
            Device_PlayerConstants.SONGS_LIST = Device_UtilFunctions.listOfSongs(getActivity().getApplicationContext());
        }
        setListItems();
    }
在您返回视图之前,getView将保持null;在您的视图中 既然你这样做了;,它调用getView;,在返回视图之前调用getView;,它将产生NPE。 例如,解决方案可以是移动这条线

context = Device_Main.this.getActivity();
init();

将视图传递给init方法Ex:initview,然后从那里传递给getViews方法Ex:getViewsview

在GetView代码中使用该视图

 playingSong = (TextView) view.findViewById(R.id.textNowPlaying);

您正在从onCreateView调用init,而onCreateView必须只包含膨胀片段的视图布局的代码。此时,getView方法将返回null,因为它尚未初始化

您必须将所有初始化代码init移动到稍后在片段生命周期中调用的方法,即onActivityCreated


请参阅:获取片段生命周期。

使用view.findviewbyd将findviewbyd放在视图下;在OncreateView方法中
private void getViews(View view) {
        playingSong = (TextView) view.findViewById(R.id.textNowPlaying);
        btnPlayer = (Button) view.findViewById(R.id.btnMusicPlayer);
context = Device_Main.this.getActivity();
init();
 playingSong = (TextView) view.findViewById(R.id.textNowPlaying);