Office Hours — Today, March 3

Thursday, February 26

Mar 3
3:55 PM
Mark M.
has entered the room
Mark M.
turned on guest access
4:00 PM
tinoper
has entered the room
Mark M.
hello, tinoper
how can I help you today?
tinoper
hello Mark
Well,I'm stuck with ViewPager with different layouts
4:05 PM
tinoper
View paste
 0 down vote favorite
	

Based on SlidingTabsBasic ,I 'm trying to improve this example including different layouts for each tab. Demo startup but crash when I choose another tab.
could you tell me some advice
Mark M.
"Demo startup but crash when I choose another tab"
you need to use LogCat and examine the Java stack trace associated with your crash
tinoper
I didn't but I'm lost
Mark M.
well, until you use LogCat and examine the Java stack trace associated with your crash, there is nothing that anyone can really do to help you
in my book, there is a "Debugging Your App" chapter that also helps you to navigate LogCat
tinoper
ok,got it.Maybe we could have another aproach for this issue.
4:10 PM
tinoper
I'm implementing new toolbar,viewpager,swipe avoiding old tabs.
Mark M.
"swipe avoiding old tabs"?
tinoper
Indeed,it's working but I always have to use the same layout structure.
Mark M.
you mean for the pages in the ViewPager?
tinoper
exactly
Afzal N.
has entered the room
tinoper
Mark M.
(BTW, hello, Afzal -- I will be with you shortly!)
tinoper
SlidingTabs indeed
Afzal N.
Hey Mark, I don't really have many questions, just lurking here I guess
tinoper
hi Afzal
Mark M.
(Afzal: OK)
Afzal N.
hi tinoper
Mark M.
tinoper: well, you commented out the code in your `PagerAdapter` that used different layouts for different position values
4:15 PM
tinoper
Yes,I did it because it doesn't work
Mark M.
and if that code is crashing, you need to examine LogCat to look at the Java stack trace associated with the crash
tinoper
but if you tell me that is the right way
Mark M.
personally, I use fragments for my pages
and then my PagerAdapter would just create different fragments based on position
tinoper
maybe do you recommend another way
Mark M.
if you want to use views for your pages, then your code may work
tinoper
I'm not sure about what to use.I just know that I would like to have tabs that shows different layout for each tab.
4:20 PM
Mark M.
again, the code that you have commented out is the basis for having a View-based PagerAdapter, with different layouts for different position values
and if you are having problems with that code, you need to debug that coded
er, debug that codde
tinoper
Maybe ,as you said before, fragments and PagerAdapter are the answer
Mark M.
er, debug that code
(sheesh, I can't type today...)
tinoper
ok,I'll do it.
:)
Mark M.
your problem is that your ViewPager is hosted by a fragment
which means to have fragments be pages inside of the ViewPager, you have to use nested fragments
that is possible but... messy
I cover it in my main ViewPager chapter in the book
(Afzal: if you come up with a question, just let me know)
tinoper
I would like to avoid messy stuff.Your recommendation are enough for me.This is a great add value to your book.
4:25 PM
Afzal N.
Sure. I've been developing for Android for quite a while (2-3 years) but I've never really gotten into the habit of writing tests. For a library which runs a service, how would you recommend testing it?
tinoper
I'll try both things,debug my code and dig again ViewPager chapter.
Mark M.
tinoper: OK
Afzal N.
(I have done API testing professionally but not with Android)
Mark M.
Afzal: what do you mean by "a library which runs a service"?
Afzal N.
It's a library that executes a service, in this case, for motion recognition in the background
Mark M.
do you mean a library that *implements* a service?
or else, where is this service coming from?
Afzal N.
More like there's a class in the library that calls startService on another class that extends a Service, both present in the library
Mark M.
OK, so you have a library that implements a service, plus has a custom API for interacting with the service, right?
Afzal N.
yup
Mark M.
OK, now I'm with you
personally, I'd tend to focus on testing the insides of the service itself
though in your case, you may have other problems first
by "motion recognition in the background", do you mean off of the camera?
4:30 PM
Afzal N.
No, using the accelerometer and gyroscope sensor values
Mark M.
oh, motion of the device, got it
OK, so I'm back to testing the core motion detection logic independently, using some mock source of sensor data
that would be where I would put my efforts
and, if the code for that is implemented nice and clean, you can even test that as plain ordinary Java code, as motion detection itself should not be too Android-specific
Afzal N.
Right, correct. So I wouldn't need Robolectric or anything for those tests then
Mark M.
right
EGHDK
has entered the room
Afzal N.
And this test would use the motion detection logic directly, not utilizing the whole library to feed sensor data?
Mark M.
well, it's tough to do reproducible tests with real sensors
(BTW, hello, EGHDK -- I will be with you shortly!)
so you'll want mock data
whether the library itself incorporates that for other reasons, or you're mocking it using one of the mocking libraries, or whatever, would tend to depend upon your code
Afzal N.
Right, makes sense. I see. I'll work on writing these tests then and see what other questions I come up with in the process
Thanks Mark!
Mark M.
you are very welcome
EGHDK: your turn! do you have a question?
4:35 PM
EGHDK
Hey Mark, 2 questions today. First, I'm using AS 1.1 and I'm trying to learn how to test my app.
The first tests I want to create have nothing to do with Android. I want just simple Junit tests.
I have a shape class and a constructor, and I want to assert that contructing a new shape with a size param of 0, throws illegalArgException
Anyway, I'm in my shape class, and I try to create a Test in AS. I select JUNIT4, but it says its not available.
Actually "Junit 4 library not found in the module"
Mark M.
what specifically do you mean by "I try to create a Test in AS"?
EGHDK
That's what is throwing me off now, because junit3 doesn't complain about that.
Mark M.
what specifically do you mean by "I try to create a Test in AS"?
EGHDK
I found a command online for tests. cmd+shift+t
4:40 PM
tinoper
has left the room
Mark M.
I have no idea what that does, sorry
EGHDK
It does "Navigate > Test" for you in a shortcut
Mark M.
OK, when you got the dialog with the "library not found in module", did you click the Fix button?
EGHDK
IntelliJ docs say that Navigate > Test will take you to the testClass of your class.
But since theres no test... it allows me to create one.
Mark M.
right, and when you got the dialog with the "library not found in module" message, did you click the "Fix" button to the right of that message?
EGHDK
Yeah.
Mark M.
that seemed to make AS happy when I just tried it, though I haven't the faintest idea what it actually changed
EGHDK
So that seems to work fine, but why does junit3 not complain. I never added junit3?
Mark M.
well, the Android SDK has JUnit3 baked in
JUnit4 comes from the AndroidJUnitRunner
I have a chapter on JUnit4 in the book
EGHDK
And also, my question really is... if I want to unit test plain Java classes... should that be the way to do it?
4:45 PM
Mark M.
well, JUnit3 vs. JUnit4 is up to you
the fact that they are plain Java classes would not really impact that decision
it's not like JUnit3 can't test plain Java classes
tinoper
has entered the room
EGHDK
Okay, yeah I'm just really unsure where to start with testing, especially since now there was something added that made tests... easier/faster?
in AS 1.1
Mark M.
um, you might be referring to the new "unit testing" thing that I haven't peeked at yet
based on comments I have seen, my guess is that it is a little rough around the edges
tinoper
Sorry,I left the room before(Internet problem). Thanks for your advice.Have a nice day
Mark M.
EGHDK
Gotcha. Yeah, before I do that, I just wanna unit test my plain java classes. I think thatd be cool and a good place to start while everything else gets ironed out.
Mark M.
tinoper: no problem!
EGHDK
Thanks, you can go to the next person.
Mark M.
EGHDK: OK
tinoper: do you have another question?
tinoper: if you come up with another question, let me know
Afzal: do you have another question?
4:50 PM
Afzal N.
Sure. If you want to use Context in your test (say, to initialize the library class), would you use Robolectric or can it just be done using the built-in tools?
Or should that test be run in a test app on the phone?
Mark M.
well, if you need a real working Context, in the JUnit3 realm, you would use AndroidTestCase, and run the test on a device or emulator
there is a recipe for JUnit4 with AndroidJUnitRunner, getting a Context from the current Instrumentation
that too would be run on a device or emulator
Afzal N.
Got it. Thanks again! I just got the subscription so I'm going through the book right now
Mark M.
if you are not actually using the Context (e.g., you accept it as input and pass it along to other stuff without calling methods on it yourself), I think Robolectric is an option for you
personally, I haven't used Robolectric
Afzal N.
Hmm I understand now
Mark M.
there are limits to what the Robolectric mocks and stubs can do for you, since they're mocks and stubs :-)
EGHDK: did you have a second question?
EGHDK
Second question. I know this is probably a stretch. How would I hook up a specific action (button click in my case) to a UI of some sort on my dev machine. Basically, right now I want to know when a button has been clicked, so I log it. WOrks fine, but I started logging all of my buttons clicks and now my logcat is filled with them, clutters my actual debug information. I would love if there was a way to notifiy my dev machine of something that I would normally do in a log, but not have it actually show in logcat. Yes, I know filtering exists, but I was wondering if anything else crosses you mind.
4:55 PM
Mark M.
well, there's no channel for that built into Android
there's nothing stopping you from writing some sort of server that runs on your developer machine, and having code in your device/emulator call that server
or, you could just log to something other than LogCat
EGHDK
Gotcha. SOunds complex. Ill probably stick to logcat.
Mark M.
there are lots of Java logging libraries, and some work on Android
they can log to a file
which won't have the rest of the LogCat clutter
EGHDK
Interesting. Alright.
Mark M.
tinoper, EGHDK: in case you missed the announcement, Version 6.5 of the book was released yesterday, so feel free to download your copy
EGHDK
Great. Next v to be out in April?
Mark M.
Afzal: since you subscribed today, you're starting with 6.5 and will get updates for a year
EGHDK: it should be the second half of April, yes
EGHDK
Any idea on what will be going into the April version?
Mark M.
I think the "tentpole" chapter will be (finally) one on tasks, the back stack, recent-tasks list, etc.
I've been putting that off for far too long
5:00 PM
Afzal N.
Yeah! Another update in April. That's actually great, you get multiple API versions in a year.
5:00 PM
tinoper
has left the room
EGHDK
Also, on version differences, I know you have some kind of changelog, but you don't have like a git diff of the changes right? Like what was actually added and removed?
Mark M.
Afzal: yes, which is why I'm hedging a bit on the late April timeframe, as we are then getting close to Google I|O
and who knows when Google might release something that forces me to adjust my release schedule :-)
EGHDK: the changebars (vertical bars on the outside page edge) show new and changed paragraphs
there's nothing for deletions, though
EGHDK
in the pdf?
Mark M.
yes
EGHDK
I'm not sure what you mean by change bars... lol
Okay I'll look for them
You have my vote on back stack and recents. Still don't get it.
Mark M.
and that's a wrap for today's chat
the transcript will be posted to http://commonsware.com/office-hours/ shortly
the next chat is tomorrow at 7:30pm US Eastern
have a pleasant day!
Afzal N.
You too. thanks!
EGHDK
thanks
Afzal N.
has left the room
EGHDK
has left the room
Mark M.
turned off guest access

Thursday, February 26

 

Office Hours

People in this transcript

  • Afzal Najam
  • EGHDK
  • Mark Murphy
  • tinoper