That definitely smells like a bug. Glad you have a workaround, though.

On Sun, Oct 10, 2010 at 8:36 PM, John Gaby <[email protected]> wrote:
> I decided to try using a ViewAnimator, and I discovered that it works,
> unless I remove the current view before displaying the new one.  If I
> do that, then it behaves the same way as before.  This got me to
> thinking that there must be something I can do to make it work even if
> I remove the old view first.  After some experimenting I discovered
> that if I set the visibility of the view that I am removing to
> INVISIBLE before I remove it, then it works fine.  This is true even
> if I use the setContentView function to set the current view, as I
> originally had it.
>
> Thanks much for your help!
>
> On Oct 10, 4:20 pm, Mark Murphy <[email protected]> wrote:
>> It is possible you are running into an Android bug. Calling
>> setContentView() repeatedly is certainly supported, but AFAIK it's a
>> bit off the mainstream, and so there may be lingering issues.
>>
>> If your goal is simply something that works, consider using a
>> ViewAnimator (e.g., ViewSwitcher) as a container, or simply change the
>> visibility of various components.
>>
>> Beyond that, I would recommend you package up a full project (not just
>> this class file) and log this as an issue onhttp://b.android.com.
>> Supplying a full project will make it incrementally easier for
>> somebody to give your code a whirl and make it incrementally more
>> likely that you'll get useful feedback.
>>
>>
>>
>> On Sun, Oct 10, 2010 at 6:36 PM, John Gaby <[email protected]> wrote:
>> > I have a put together a very simple program which exhibits this
>> > behavior.  Run the following program and then do the following
>>
>> > 1) Click in the edit control of the first page which should bring up
>> > the soft keyboard
>> > 2) Using the soft keyboard type 'aaa'
>> > 3) Click the 'Press This' button
>> > 4) The view switches to the next page
>> > 5) Click in the edit control of this new page and using the soft
>> > keyboard type 'bbb'
>> > 6) Click the 'Press This' button
>> > 7) You should now see the first page with the edit control which still
>> > has the 'aaa' text in it.
>> > 8) Click in that edit control and enter 'ccc' via the soft keyboard.
>> > 9) Note that nothing appears to happen (except you get some
>> > MediaPlayer errors in LogCat???)
>> > 10) Click the "Press This' button which switches back to the second
>> > page.
>> > 11) Note that the 'ccc' you typed is in this edit control
>>
>> > Clearly, even though the second page is no longer visible, it somehow
>> > still has the focus.  I have tried using the 'requestFocus' function
>> > to set the focus into both the EditText control and the LinearLayout
>> > view of the currently visible view, but this does not seem to have any
>> > effect.  Can someone please tell me how to make this work?
>>
>> > Thanks
>>
>> > package com.gabysoft.testandroid;
>>
>> > import android.app.Activity;
>> > import android.os.Bundle;
>> > import android.view.View;
>> > import android.view.View.OnClickListener;
>> > import android.widget.Button;
>> > import android.widget.EditText;
>> > import android.widget.LinearLayout;
>> > import android.widget.LinearLayout.LayoutParams;
>>
>> > public class TestAndroid extends Activity implements OnClickListener {
>> >    /** Called when the activity is first created. */
>> >    LinearLayout     ll1;
>> >    LinearLayout    ll2;
>> >    boolean one = true;
>>
>> >    LinearLayout CreatePage()
>> >    {
>> >        LinearLayout ll;
>> >        EditText et;
>>
>> >        ll = new LinearLayout(this);
>> >        et = new EditText(this);
>> >        LayoutParams lp = new LinearLayout.LayoutParams(100, 50);
>> >        et.setLayoutParams(lp);
>> >        Button btn = new Button(this);
>> >        btn.setText("Press This");
>> >        btn.setOnClickListener(this);
>>
>> >        ll.addView(et);
>> >        ll.addView(btn);
>>
>> >        return(ll);
>> >    }
>>
>> >   �...@override
>> >    public void onCreate(Bundle savedInstanceState) {
>> >        super.onCreate(savedInstanceState);
>>
>> >        ll1 = CreatePage();
>> >        ll2 = CreatePage();
>>
>> >        setContentView(ll1);
>> >    }
>>
>> >   �...@override
>> >    public void onClick(View arg0)
>> >    {
>> >        if (one)
>> >        {
>> >            setContentView(ll2);
>> >        }
>> >        else
>> >        {
>> >            setContentView(ll1);
>> >        }
>>
>> >        one    = !one;
>> >    }
>> > }
>>
>> > On Oct 9, 10:35 am, John Gaby <[email protected]> wrote:
>> >> I have an app where the user is entering some data via an EditText
>> >> control.  This is done by alternating between 2 pages each of which
>> >> obtains one piece of data.  When I start, I create the first page and
>> >> make it active by calling the setContentView for the activity. I also
>> >> set the focus into the EditText control on this page.  When I do that,
>> >> I am able to bring up the soft keyboard and type text into the
>> >> control.
>>
>> >> I then press a 'Next' button, which brings up the second page.  I
>> >> create this page which has another EditText control, and make it
>> >> active by calling the setContentView.  Once again, this works
>> >> correctly, and I am able to enter text into the control.
>>
>> >> When I press the 'Next' button again, the first page is then make
>> >> active again (I am reusing the origonal page, and do not recreate
>> >> it).  However, when I do this, I can no longer type text with the soft
>> >> keyboard and have it go into the EditText control.  The control shows
>> >> a blinking cursor as if it has focus, but if I type on the soft
>> >> keyboard, nothing happens, except I get the following errors in
>> >> LogCat:
>>
>> >> 10-09 17:28:52.722: ERROR/MediaPlayerService(30):   error: -2
>> >> 10-09 17:28:52.722: ERROR/MediaPlayer(52): Unable to to create media
>> >> player
>> >> 10-09 17:28:52.722: WARN/AudioService(52): MediaPlayer IOException:
>> >> java.io.IOException: setDataSource failed.: status=0x80000000
>>
>> >> Note that if I don't bring up the soft keyboard and use the hardware
>> >> keyboard instead, everything seems to work correctly.
>>
>> >> Obviously, I am doing something wrong here, but I cannot figure out
>> >> what. Can anyone give me a clue as what is happening here?
>>
>> >> Thanks.
>>
>> > --
>> > You received this message because you are subscribed to the Google
>> > Groups "Android Developers" group.
>> > To post to this group, send email to [email protected]
>> > To unsubscribe from this group, send email to
>> > [email protected]
>> > For more options, visit this group at
>> >http://groups.google.com/group/android-developers?hl=en
>>
>> --
>> Mark Murphy (a Commons 
>> Guy)http://commonsware.com|http://github.com/commonsguyhttp://commonsware.com/blog|http://twitter.com/commonsguy
>>
>> _Android Programming Tutorials_ Version 3.0.1 Available!
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>



-- 
Mark Murphy (a Commons Guy)
http://commonsware.com | http://github.com/commonsguy
http://commonsware.com/blog | http://twitter.com/commonsguy

Android Training in London: http://skillsmatter.com/go/os-mobile-server

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to