Aren't focus states supposed to bubble to child Views?

by patbenatar » Mon, 19 Apr 2010 16:31:45 GMT


Sponsored Links
 Hey all-

When using a View within a View, for example an ImageView within a
LinearLayout, both of which have xml drawable resources (the
LinearLayout as a background) specifying PNG drawables to use for the
on/off states, shouldn't children Views receive the focus state when
their parent gets focus? So as far as I understand, both my
LinearLayout and ImageView should be switching to their focus
states...right? Apparently not... Or, more likely, apparently my
implementation is incorrect..

The focus state works on the LinearLayout but my ImageView never
receives focus.. I have both Views set to android:focusable="true".

Thanks,
Nick

--



Other Threads

1. How to show notification while service is running..?

Hi,

                    I want to show notification in service..!

                    While I click button in my home screen I just call
service.!

                    That service run every 30 seconds with the help of
timer..! I want to show result to user..!

                    How can I implement this..! Herewith I attached
code..


HOme screen
----------------------

package com.servicetest;

import java.util.Timer;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class Home extends Activity
{
        private Button btn;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = (Button)findViewById(R.id.Button01);

        btn.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v)
                        {
                                // TODO Auto-generated method stub
                                Toast.makeText(getApplicationContext(), "Hai",
Toast.LENGTH_SHORT).show();
                                Intent in = new Intent();
                                in.setClassName("com.servicetest", 
"com.servicetest.ServiceTest");
                                startService(in);
                        }
                });
    }
}


ServiceTest.java
-----------------------


package com.servicetest;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import android.app.AlertDialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

public class ServiceTest extends Service
{
        private Timer timer = new Timer();
        private static final String TAG = "MyService";
        MediaPlayer player;
        WebserviceConnect wsConnect = new WebserviceConnect();
        String result = "";
        boolean flag = true;
        private long delay = 1000;
        public static final int NOTIFICATION_ID_RECEIVED = 01221;

        @Override
        public IBinder onBind(Intent intent)
        {
                return null;
        }

        @Override
        public void onCreate()
        {
                Toast.makeText(this, "My Service Created",
Toast.LENGTH_LONG).show();
                Log.d(TAG, "onCreate");
        }

        @Override
        public void onDestroy()
        {
                Toast.makeText(this, "My Service Stopped",
Toast.LENGTH_LONG).show();
                Log.d(TAG, "onDestroy");
        }

        @Override
        public void onStart(Intent intent, int startid) {
                Toast.makeText(this, "My Service Started",
Toast.LENGTH_LONG).show();
                Log.d(TAG, "onStart");

                timer.scheduleAtFixedRate(new TimerTask()
                {

                        @Override
                        public void run()
                        {
                                // TODO Auto-generated method stub
                                result = wsConnect.Connect("CheckStatus", "ID", 
"7x897");
                                Log.d(TAG,result);
                        }

                }, delay  , delay);

                Log.d(TAG,result);
                Toast.makeText(getApplicationContext(), result, 5).show();
                if (result.equals("Success"))
                {
                        timer.cancel();
                        timer = null;
                }
        }

}




Thanks & Warm Regards,
Gold

-- 

2. Help with basic Threading / Message handling App

Hello everyone! I recently started learning to make android apps, and
I decided that I needed to learn how to go about working with multiple
threads (I eventually want to make fairly simple, 2D games). So I
figured I would design a super-simple app that would use two threads
and send messages from one thread to the other.

Here's the app I came up with: It should simply display one text view
on the screen. A handler should be set up in the main thread that will
respond to messages - if the message sent contains the value 1, then
it should set the text of this text view to "Start." If it receives a
2, then it should change that text to "It worked!"

That message should come from the other, secondary thread, which
should perform like this: It contains one variable, an int named
counter that starts off at 0. Then, if the counter is 0, the counter
is set to 1, and the value of counter is sent to the main thread
handler in the what field of a message called m (where the main thread
handler should receive it and change the text view text to "Start.").
Then, the thread should sleep for 5 seconds. When it resumes and runs
a second time, it should change the value of counter to 2, and send
that to the main thread handler, which would then change the text view
text to "It worked!"

Here is my code:

---------- threadTest.java ----------------------------------
    package com.thread.test;

    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.widget.TextView;

    public class threadTest extends Activity {

       //Fields
       TextView myTextView = null;

       Thread refreshThread = null;

       //Handler
       Handler updateHandler = new Handler()
       {

          //Handle message routine
          //This gets called on every message that is recieved

          //@Override
          public void handleMessage(Message msg)
          {
             if (msg.what == 1)
             {
                myTextView.setText("Start");
             }
             if (msg.what == 2)
             {
                myTextView.setText("It Worked!");
             }
             super.handleMessage(msg);
          }
       };

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
           //View referencing
           this.myTextView = (TextView)findViewById(R.id.myTextView);

            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            //Thread creation
            this.refreshThread = new Thread(new updateThread());
            this.refreshThread.start();
        }

        class updateThread implements Runnable{
           private int counter = 0;
           //@Override
           public void run()
           {
              while(!Thread.currentThread().isInterrupted())
              {
                 Message m = new Message();
                 if (this.counter == 1)
                 {
                    this.counter = 2;
                    m.what = this.counter;
                    threadTest.this.updateHandler.sendMessage(m);
                 }
                 if (this.counter == 0)
                 {
                    this.counter = 1;
                    m.what = this.counter;
                    threadTest.this.updateHandler.sendMessage(m);
                 }

                 try{
                    Thread.sleep(5000);
                 } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                 }
              }
           }
        }//End class updateThread

    }

-----------------------------------------------------------

Unfortunately, it does not work. As soon as I try to run it, I get a
force close error. i checked my logcat out, and this is what I found:

----------- My logcat --------------------------------
09-30 00:24:47.883: INFO/ActivityManager(71): Starting activity:
Intent { act=android.intent.action.MAIN
cat=[android.intent.category.LAUNCHER] flg=0x10200000
cmp=com.thread.test/.threadTest }

09-30 00:24:48.543: WARN/ActivityManager(71): Activity pause timeout
for HistoryRecord{43f9cf00 com.android.launcher/
com.android.launcher2.Launcher}

09-30 00:24:48.783: INFO/ActivityManager(71): Start proc
com.thread.test for activity com.thread.test/.threadTest: pid=250
uid=10039 gids={1015}

09-30 00:24:50.453: DEBUG/dalvikvm(71): GREF has increased to 301
09-30 00:24:50.483: DEBUG/AndroidRuntime(250): Shutting down VM
09-30 00:24:50.483: WARN/dalvikvm(250): threadid=1: thread exiting
with uncaught exception (group=0x4001d800)
09-30 00:24:50.552: ERROR/AndroidRuntime(250): FATAL EXCEPTION: main
09-30 00:24:50.552: ERROR/AndroidRuntime(250):
java.lang.NullPointerException
09-30 00:24:50.552: ERROR/AndroidRuntime(250):     at
com.thread.test.threadTest$1.handleMessage(threadTest.java:33)
09-30 00:24:50.552: ERROR/AndroidRuntime(250):     at
android.os.Handler.dispatchMessage(Handler.java:99)
09-30 00:24:50.552: ERROR/AndroidRuntime(250):     at
android.os.Looper.loop(Looper.java:123)
09-30 00:24:50.552: ERROR/AndroidRuntime(250):     at
android.app.ActivityThread.main(ActivityThread.java:4627)
09-30 00:24:50.552: ERROR/AndroidRuntime(250):     at
java.lang.reflect.Method.invokeNative(Native Method)
09-30 00:24:50.552: ERROR/AndroidRuntime(250):     at
java.lang.reflect.Method.invoke(Method.java:521)
09-30 00:24:50.552: ERROR/AndroidRuntime(250):     at
com.android.internal.os.ZygoteInit
$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-30 00:24:50.552: ERROR/AndroidRuntime(250):     at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-30 00:24:50.552: ERROR/AndroidRuntime(250):     at
dalvik.system.NativeStart.main(Native Method)
09-30 00:24:50.683: WARN/ActivityManager(71):   Force finishing
activity com.thread.test/.threadTest
-------------------------------------------------------

Unfortunately, I don't exactly what this means, but I gather that the
problem comes from an uncaught exception occuring in "threadid=1",
that it was a java.lang.NullPointerException, and that it had
something to do with handleMessage. Am i correct in this
interpretation? And can anyone give me pointers on what I'm doing
wrong here?

Thank you very much for your time!

-- 

3. Mod: Pendaftaran sudah ditutup

4. android.view.inflateException:Binary XML file line #43:Inflating Class<unknown>

5. Non-market app, unknown sources, and AT&T

6. Query about ClickListeners

7. PandaBoard Early Adopter Program -- grab a panda!