Here is my main activity. My counter is null, although it is already initialized. My application crashes whenever access to any layout element
and for life I canβt understand why. I spent quite a bit of time on this, researched a lot of posts online for a solution, and tried a number of fixes. So far, nothing has worked. Any ideas?
Also ignore date / sort code. This is very dirty, I already have a more accurate way to do this, but will not implement it until I fix this part.
Note. The identifiers are correct in my layouts, I am very sure that this is not a problem.
Public class RADIO_Live extends FragmentActivity {
SectionsPagerAdapter mSectionsPagerAdapter; ViewPager mViewPager; View fragviewLive; View fragviewPod; private int mYear, mMonth, mDay, cYear, cMonth, cDay; private TextView mCurrentDate; private TextView mSelectedDate; private TextView TextCurrentTime; private TextView TextTotalTime; boolean firstRUN = true; SeekBar Podseekbar; int myProgress = 0; int podMax = 0; int CurrentPosition = 0; boolean playerPODon = false; // variable to keep track if live stream player and podcast player is on or off and if podacast player is paused boolean playerPODon1st = true; String mMonthName, cMonthName, cMonthFullName; String podFileTest, podPlayName, SelectedHour, SelectedDate = null; String showdate, HourShowText = null; String[] podDates = new String[14]; String[] podDatesName = new String[14]; int testDay = 0; int dayOfWeek; private final Handler UIhandler = new Handler(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Create the adapter that will return a fragment for each of the three primary sections // of the app. mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); //context.startService(serviceIntent); startService(new Intent(this, RADIO_Service.class)); // Set up the ViewPager with the sections adapter. mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mSectionsPagerAdapter); fragviewPod = getLayoutInflater().inflate(R.layout.podcasts, null); // Capture the textview elements mCurrentDate = (TextView) fragviewPod.findViewById(R.id.currentdateDisplay); mSelectedDate = (TextView) fragviewPod.findViewById(R.id.selecteddateDisplay); TextTotalTime = (TextView) fragviewPod.findViewById(R.id.TotalTimeText); TextCurrentTime = (TextView) fragviewPod.findViewById(R.id.CurrentTimeText); // Retrieve the current date Calendar c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); mMonth = c.get(Calendar.MONTH); mDay = c.get(Calendar.DAY_OF_MONTH); IntentFilter filt = new IntentFilter("fromService"); RADIO_Live.this.registerReceiver(br, filt); IntentFilter Podfilt = new IntentFilter("fromServicePod"); RADIO_Live.this.registerReceiver(PODbr, Podfilt); actBroadcast("null", "whatsplaying"); ArrayList<CharSequence> dateadapterarray = new ArrayList<CharSequence>(); int ArrayMarker = 0; for (int podtest = 1; podtest < 15; podtest++) { MakeDateList(podtest); if (dayOfWeek != (1|7)) { podFileTest = cMonthName + " " + cDay + ", " + cYear; podDatesName[ArrayMarker] = podFileTest; String cYearTemp = cYear + ""; String cMonthTemp = cMonth + ""; if (cMonth >= 10) { } else { cMonthTemp = cMonthTemp.replace("0", ""); cMonthTemp = "0" + cMonthTemp; } if (cDay > 9) { podDates[ArrayMarker] = (cMonthTemp + "" + cDay + "" + cYearTemp.replace("20", "")); } if (cDay <= 9) { podDates[ArrayMarker] = (cMonthTemp + "" + "0" + cDay + "" + cYearTemp.replace("20", "")); } ArrayMarker++; } if (dayOfWeek == (1|7) && (ArrayMarker > 0)) { ArrayMarker--; } } for (int buildtext = 0; buildtext < 14; buildtext++) { dateadapterarray.add(podDatesName[buildtext]); } fragviewPod = getLayoutInflater().inflate(R.layout.podcasts, null); Spinner datespinner = (Spinner) fragviewPod.findViewById(R.id.spinnerdate); Spinner hourspinner = (Spinner) fragviewPod.findViewById(R.id.spinnerhour); //Spinner hourspinner = (Spinner) mViewPager.findViewById(R.id.spinnerhour); ArrayAdapter<CharSequence> dateadapter = new ArrayAdapter<CharSequence>(RADIO_Live.this, android.R.layout.simple_spinner_item, dateadapterarray); dateadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); ArrayAdapter<CharSequence> houradapter = new ArrayAdapter<CharSequence>(RADIO_Live.this, android.R.layout.simple_spinner_item, R.array.hour_array); houradapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); datespinner.setAdapter(dateadapter); hourspinner.setAdapter(houradapter); // Display the current date under "Today Date" at the top updateCurrentDate(); datespinner.setOnItemSelectedListener(new DateOnItemSelectedListener()); hourspinner.setOnItemSelectedListener(new HourOnItemSelectedListener()); Button livebutton = (Button) fragviewLive.findViewById(R.id.button_streamstartstop); //livebutton.setOnClickListener((View.OnClickListener) this); Button podplaybutton = (Button)fragviewPod.findViewById(R.id.button_pod_play); //podplaybutton.setOnClickListener((View.OnClickListener) this); }
Update: Here the views unfold. I tried to inflate the two looks into their own static LinearLayouts, but that doesn't work either.
So, at the beginning of the main action:
static LinearLayout livelayout; static LinearLayout podlayout;
And then the code for the fragments. This is literally the code from the default empty application from Android Studio with my stuff filled in:
public static class DummySectionFragment extends Fragment { public DummySectionFragment() { } public static final String ARG_SECTION_NUMBER = "section_number"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { TextView textView = new TextView(getActivity()); textView.setGravity(Gravity.CENTER); Bundle args = getArguments(); int test = args.getInt(ARG_SECTION_NUMBER); livelayout = (LinearLayout)inflater.inflate(R.layout.live, null); podlayout = (LinearLayout)inflater.inflate(R.layout.podcasts, null); inflater.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); int resID = 0; switch (test) { case 1: resID = R.layout.live; break; case 2: resID = R.layout.podcasts; break; }
So, to clarify, I have main.xml, which is just the title and adapter of the page, and then live.xml and podcast.xml.
main.xml:
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".RADIO_Live" > <android.support.v4.view.PagerTitleStrip android:id="@+id/pager_title_strip" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" android:background="#33b5e5" android:textColor="#fff" android:paddingTop="4dp" android:paddingBottom="4dp" /> </android.support.v4.view.ViewPager>
Live.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tab1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff" android:orientation="vertical" > <LinearLayout android:id="@+id/tab1.1" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="15sp" android:layout_marginBottom="10sp" android:layout_marginLeft="30sp" android:layout_marginRight="30sp" android:textSize="18sp" android:text="@string/LiveTabBlurb" /> </LinearLayout> <Button android:id="@+id/button_streamstartstop" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10sp" android:layout_marginLeft="20sp" android:layout_marginRight="20sp" android:textSize="28sp" android:textStyle="italic" android:textColor="#FFFFFF" android:text="@string/ListenLiveText" android:onClick="LiveButtonClick" /> <ProgressBar android:layout_gravity="center" android:layout_height="100dp" android:layout_width="wrap_content" android:id="@+id/liveProgress" android:paddingTop="30dp" android:indeterminateBehavior="cycle" android:indeterminate="true" android:visibility="gone"> </ProgressBar> <ProgressBar android:id="@+id/liveProgress" style="?android:attr/progressBarStyleLarge" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="20dp" android:visibility="gone" /> </LinearLayout>
Podcasts.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tab2" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff"> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:layout_width="160dp" android:layout_height="wrap_content"> <TextView android:id="@+id/currentdateDescription" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="5px" android:text="Today Date:" /> <TextView android:id="@+id/currentdateDisplay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="5px" android:text="" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="160dp" android:layout_height="wrap_content"> <TextView android:id="@+id/selecteddateDescription" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="5px" android:text="Selected Date:" /> <TextView android:id="@+id/selecteddateDisplay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="5px" android:text="None Selected" /> </LinearLayout> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Spinner android:id="@+id/spinnerdate" android:layout_width="160dp" android:layout_height="wrap_content" android:prompt="@string/date_prompt" /> <Spinner android:id="@+id/spinnerhour" android:layout_width="160dp" android:layout_height="wrap_content" android:prompt="@string/hour_prompt" /> </LinearLayout> <Button android:id="@+id/button_pod_play" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20sp" android:layout_marginRight="20sp" android:paddingTop="5sp" android:layout_marginTop="10sp" android:textSize="28sp" android:textColor="#FFFFFF" android:textStyle="italic" android:text="@string/PlayPodText" android:onClick="PodButtonClick"/> <SeekBar android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="5dp" style="?android:attr/progressBarStyleHorizontal" android:layout_margin="10dp" android:id="@+id/seekBar" android:max="100" android:progress="0" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/CurrentTimeText" android:layout_width="60dp" android:layout_height="wrap_content" android:paddingTop="5px" android:textSize="18px" android:text="0:00" /> <ProgressBar android:layout_gravity="center" android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/podProgress" android:paddingTop="10px" android:indeterminateBehavior="cycle" android:indeterminate="true" android:visibility="gone"> </ProgressBar> <TextView android:id="@+id/TotalTimeText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="5px" android:gravity="right" android:textSize="18px" android:text="0:00" /> </LinearLayout> </LinearLayout>
A bit more background. This application actually worked 100%, but I used the ugly tabbed interface based on Android 2.0 days and wanted to update the nice Holo interface with the page view adapter. I never did this before I tried, and I am having these problems.
UPDATE: I have some things that work (kinda). When the debugging of my two spinners is no longer zero, at least according to the debugger. But the application still crashes when any layout objects access the access object. If I try to install any of the text views or spinners, it seems like a crash or just won't refresh the content.
Fragment Code:
public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { //Fragment fragment = new DummySectionFragment(); Fragment fragment; Bundle args = new Bundle(); switch(i){ case 0: fragment = new fragLive(); args.putInt(fragLive.ARG_SECTION_NUMBER, i + 1); break; case 1: fragment = new fragPod(); args.putInt(fragPod.ARG_SECTION_NUMBER, i + 1); break; default: fragment = new fragLive(); args.putInt(fragLive.ARG_SECTION_NUMBER, i + 1); break; } fragment.setArguments(args); return fragment; } @Override public int getCount() { return 2; } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return getString(R.string.title_section1).toUpperCase(); case 1: return getString(R.string.title_section2).toUpperCase(); } return null; } } /** * Two classes for the two layout fragments */ public class fragLive extends Fragment { public fragLive() { } public static final String ARG_SECTION_NUMBER = "section_number"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { TextView textView = new TextView(getActivity()); textView.setGravity(Gravity.CENTER); Bundle args = getArguments(); int test = args.getInt(ARG_SECTION_NUMBER); inflater.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); //textView.setText(Integer.toString(args.getInt(ARG_SECTION_NUMBER))); fragviewLive = inflater.inflate(R.layout.live, null); return fragviewLive; } } public class fragPod extends Fragment { public fragPod() { } public static final String ARG_SECTION_NUMBER = "section_number"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { TextView textView = new TextView(getActivity()); textView.setGravity(Gravity.CENTER); Bundle args = getArguments(); int test = args.getInt(ARG_SECTION_NUMBER); inflater.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); //textView.setText(Integer.toString(args.getInt(ARG_SECTION_NUMBER))); fragviewPod = inflater.inflate(R.layout.podcasts, null); return fragviewPod; } }