Android:getview.findviewbyid上的片段错误?
我正在开发片段音乐播放器的应用程序。在这里,当我使用代码从XML获取视图时,它停止了工作 我的xml代码是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 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);