Dialog rare behavior

Put your problem here if it does not fit any of the other categories.

Dialog rare behavior

Postby artnun » Sat Jan 17, 2009 12:31 am

Please Help !!! I have a problem with the Dialog please test this code:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. import android.app.Activity;
  3.  
  4. import android.app.AlertDialog;
  5.  
  6. import android.app.Dialog;
  7.  
  8. import android.content.DialogInterface;
  9.  
  10. import android.os.Bundle;
  11.  
  12. import android.os.Handler;
  13.  
  14. import android.os.Message;
  15.  
  16. import android.util.Log;
  17.  
  18. import android.widget.TextView;
  19.  
  20.  
  21.  
  22. public class ThreadsTest extends Activity {
  23.  
  24.        
  25.  
  26.         private boolean run=true;
  27.  
  28.         private int pos=0;
  29.  
  30.         private int numbers[]={1,2,3,4,5,6,7,8,9,10};
  31.  
  32.         private String message;
  33.  
  34.         private TextView tv;
  35.  
  36.         private static final int HDL_SET_TEXT=1;
  37.  
  38.         private static final int HDL_SHOW_DIALOG=2;
  39.  
  40.        
  41.  
  42.         private static final int DIALOG_1=1;
  43.  
  44.        
  45.  
  46.     /** Called when the activity is first created. */
  47.  
  48.     @Override
  49.  
  50.     public void onCreate(Bundle savedInstanceState) {
  51.  
  52.         super.onCreate(savedInstanceState);
  53.  
  54.         setContentView(R.layout.main);
  55.  
  56.         tv=(TextView) findViewById(R.id.textview_number);
  57.  
  58.         pos= savedInstanceState != null ? savedInstanceState.getInt("pos") : 0;
  59.  
  60.         run= savedInstanceState != null ? savedInstanceState.getBoolean("run") : true;
  61.  
  62.         proc();
  63.  
  64.     }
  65.  
  66.    
  67.  
  68.     private void proc(){
  69.  
  70.                 new Thread() {
  71.  
  72.             public void run() {
  73.  
  74.                try {
  75.  
  76.                                 while (run && pos<numbers.length) {
  77.  
  78.                                         message="The number is "+numbers[pos];
  79.  
  80.                                         mHandler.sendMessage(mHandler.obtainMessage(HDL_SET_TEXT));
  81.  
  82.                                         Log.d("ThreadsTest","message="+message);
  83.  
  84.                                         Thread.sleep(2000);
  85.  
  86.                                         pos++;
  87.  
  88.                                         if(pos==4 || pos==8){
  89.  
  90.                                                 run=false;
  91.  
  92.                                                 mHandler.sendMessage(mHandler.obtainMessage(HDL_SHOW_DIALOG));
  93.  
  94.                                         }
  95.  
  96.                                 }
  97.  
  98.                                
  99.  
  100.                }catch(Exception e){
  101.  
  102.                }
  103.  
  104.                        
  105.  
  106.             }
  107.  
  108.        }.start();
  109.  
  110.         }
  111.  
  112.    
  113.  
  114.     @Override
  115.  
  116.     protected void onSaveInstanceState(Bundle outState) {
  117.  
  118.         super.onSaveInstanceState(outState);
  119.  
  120.         outState.putInt("pos", pos);
  121.  
  122.         outState.putBoolean("run", run);
  123.  
  124.     }
  125.  
  126.    
  127.  
  128.     @Override
  129.  
  130.     protected Dialog onCreateDialog(int id) {
  131.  
  132.         switch (id) {
  133.  
  134.                
  135.  
  136.                 case DIALOG_1:
  137.  
  138.                 return new AlertDialog.Builder(this).setTitle("Test")
  139.  
  140.                 .setMessage("message="+message)
  141.  
  142.                         .setPositiveButton("Continue",
  143.  
  144.                                         new DialogInterface.OnClickListener() {
  145.  
  146.                                                 public void onClick(DialogInterface dialog,
  147.  
  148.                                                                 int whichButton) {
  149.  
  150.                                                         run=true;
  151.  
  152.                                                         proc();
  153.  
  154.                                                 }
  155.  
  156.                                         }).create();
  157.  
  158.         }
  159.  
  160.         return null;
  161.  
  162.     }
  163.  
  164.    
  165.  
  166.     private Handler mHandler = new Handler() {
  167.  
  168.                 @Override
  169.  
  170.                 public void handleMessage(Message msg) {
  171.  
  172.                         switch (msg.what) {
  173.  
  174.                        
  175.  
  176.                         case HDL_SET_TEXT: {
  177.  
  178.                                 tv.setText("message="+message);
  179.  
  180.                                 break;
  181.  
  182.                         }
  183.  
  184.                         case HDL_SHOW_DIALOG: {
  185.  
  186.                                 showDialog(DIALOG_1);
  187.  
  188.                                 break;
  189.  
  190.                         }
  191.  
  192.                        
  193.  
  194.                         default:
  195.  
  196.                                 super.handleMessage(msg);
  197.  
  198.                         }
  199.  
  200.                 }
  201.  
  202.         };
  203.  
  204. }
  205.  
  206.  
Parsed in 0.045 seconds, using GeSHi 1.0.8.4


Layout:
Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
  1.  
  2. <?xml version="1.0" encoding="utf-8"?>
  3.  
  4. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  5.  
  6.    android:orientation="vertical"
  7.  
  8.    android:layout_width="fill_parent"
  9.  
  10.    android:layout_height="fill_parent"
  11.  
  12.    >
  13.  
  14.         <TextView
  15.  
  16.         android:id="@+id/textview_number"
  17.  
  18.    android:layout_width="fill_parent"
  19.  
  20.    android:layout_height="wrap_content"
  21.  
  22.    android:text="@string/hello"
  23.  
  24.    android:textSize="25dip"
  25.  
  26.    />
  27.  
  28. </LinearLayout>
  29.  
  30.  
Parsed in 0.002 seconds, using GeSHi 1.0.8.4




:arrow: Please compare the message in the dialogs, the first dialog shows the correct message but the second dialog shows a wrong message it must be "The number is 8". What am i doing wrong :?: Please help.


artnun
artnun
Junior Developer
Junior Developer
 
Posts: 11
Joined: Mon Nov 03, 2008 8:50 pm

Top

Postby MrSnowflake » Sat Jan 17, 2009 8:42 am

I'm kinda to lazy to run it myself, but as you use onCreateDialog(), I suppose the 2nd (and every following dialog) shows the same message as the first dialog, don't it? If that's true, then that's because onCreateDialog() only creates the dialogs once, if you want to change anything about the dialog, you should implement onPrepareDialog() (or something like that).
User avatar
MrSnowflake
Moderator
Moderator
 
Posts: 1439
Joined: Sat Feb 16, 2008 3:11 pm
Location: Flanders, Belgium

Thanks

Postby artnun » Sat Jan 17, 2009 6:42 pm

Thank you MrSnowflake, I will try that.


artnun
artnun
Junior Developer
Junior Developer
 
Posts: 11
Joined: Mon Nov 03, 2008 8:50 pm

Postby artnun » Mon Jan 19, 2009 6:57 pm

Thank you very much MrSnowflake, it works.

artnun
artnun
Junior Developer
Junior Developer
 
Posts: 11
Joined: Mon Nov 03, 2008 8:50 pm

Postby MrSnowflake » Mon Jan 19, 2009 7:03 pm

Np
User avatar
MrSnowflake
Moderator
Moderator
 
Posts: 1439
Joined: Sat Feb 16, 2008 3:11 pm
Location: Flanders, Belgium

Top

Return to Other Coding-Problems

Who is online

Users browsing this forum: No registered users and 14 guests