问题
I followed this to create an Android Radio Stream
over there It's working fine So I am trying to add a tab-layout to this
So I followed this to add Tab layout
Over there I have Added But I got Lot of error so I have Changed some like
FROM
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
TO this
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View viewRoot = inflater.inflate(R.layout.main_activity, container, false);
And added viewRoot.findViewById
in some places in on-create
but after On create What ever are there I have Given like getActivity().findViewById
Because I have Given return viewRoot;
in onCreate it is not possible
Now I am getting errors at play.setBackground(getResources().getDrawable(R.drawable.volume0));
Like
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setBackground(android.graphics.drawable.Drawable)' on a null object reference
at star.yx.tabview.ProfileFragment.updatePlayStatus(ProfileFragment.java:370)
at star.yx.tabview.ProfileFragment.setIFace(ProfileFragment.java:205)
at star.yx.tabview.ProfileFragment.onCreateView(ProfileFragment.java:158)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2184)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1298)
at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2136)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092)
at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1969)
at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:620)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1268)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1642)
at android.view.View.measure(View.java:18596)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464)
at android.view.View.measure(View.java:18596)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
at android.view.View.measure(View.java:18596)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:393)
at android.view.View.measure(View.java:18596)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:18596)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:721)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:612)
at android.view.View.measure(View.java:18596)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2897)
at android.view.View.measure(View.java:18596)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2248)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1306)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1548)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1191)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6642)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
at android.view.Choreographer.doCallbacks(Choreographer.java:590)
at android.view.Choreographer.doFrame(Choreographer.java:560)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5951)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:
I have Added my code in ProfileFragment for Testing purpose....
Can anyone Suggest me How to use My activity In fragments like my example table layout Please suggest me on this kind
Update
All I am trying.
I am just Using my Radio Layout In a Tablet Layout So in one tab I can play the radio in other I can Use some other. But Here My radio service is not in fragment/Tab layout So I am getting A lot of errors Can anyone Suggest me How to add Tab-layout to my Radio Activity I followed my android tutorials but I tried and tired Please Help me How to Use those two examples in one ...
回答1:
Cause
In onResume
you are calling setIFace()
method which internally triggers updatePlayStatus
method.
If you look at updatePlayStatus
method you will see there is an ImageView play which is assigned to view with ID icon_play
private void updatePlayStatus() {
ImageView play = (ImageView) findViewById(R.id.icon_play);
if ("stop".equals(etat_lecture) || "pause".equals(etat_lecture)) {
play.setBackground(getDrawable(R.drawable.ic_equalizer0));
} else {
play.setBackground(getDrawable(R.drawable.ic_equalizer));
}
}
If Android can't find any view with ID = icon_play
then Android will automatically assign it null
. Later you are calling play.setBackground
, Since play
variable is null in your case, you are getting Null Pointer exception.
Solution
- First, check if you are using the correct layout in your fragment class ie. there must be some view with ID
icon_play
. - Secondly, try to clean and build the project. It can occur because of faulty generated R.java class
- Most important , Use
viewRoot.findViewById
instead ofgetActivity().findViewById
, getActivity might return null, or better use ButterKnife to avoid all those boilerplate
MainActivity code was complete mesh, I have broken it down into fragments
You can take a look at source code on my GitHub
https://github.com/hiteshsahu/Android-Radio
来源:https://stackoverflow.com/questions/42153697/android-changing-a-normal-layout-to-tab-layout-error-in-image-buttons-and-other