Showing posts with label uncategorized. Show all posts
Showing posts with label uncategorized. Show all posts

Tuesday, April 23, 2013

List View - How to avoid black selected items

  Twice I faced the same problem. I had used listview. If you drag on the view it would show all the list elements.

Solution:

   In the code, use
listview.setCacheColorHint(Color.TRANSPARENT).

Your problem is solved

Simple. Isn't it?

Monday, April 22, 2013

Activity in android

      Activity is important ui unit of android application.

To start an activity from another, you have to use an intent by sending the new activity class as parameter.

e.g.
         Intent i = new Intent(this, NewActivity.class);


Next you call startActivity method

     startActivity(i);

You can pass extra data to the new actiivity by using putExtra method.


   i.putExtra( "Title",mTitle);


In the new activity, you can extract this information using getExtra methods

   Intent i = getIntent();
   String t = i.getStringExtra("Title");

      

Saturday, April 20, 2013

Threads in Android

Many of the network activities delay the program and the screen looks unresponsive. And ultimately you will get ANR.
  You can overcome this with a thread


class MyThread extends Thread{

      public MyThread(){
          //initialise your variables
      }
      public void run(){
         //write your expensive code here
     }
};

  In your ui therad you instantiate this thread


    MyThread myt = new MyThread(a,b,c);
    myt.start();

User will not notice the delay as myt is not in ui thread

Friday, April 19, 2013

Show a progress dialog when a thread is running

  We can easily show a progress dialog with Async task. But asyn task has its own drawbacks. There can be no ui's and the task can be executed only once.
   Better way is to use a thread for lengthy processing and show a progess dialog in the ui thread. (I struggled quite a bit. My progress dialog would keep on spinning infinitely :-( )

e.g.

//this is your main activity thread
handler = new FeedReadHandler();
....
.....

pd = ProgessDialog.show(context,"Loading","Loading the file. please wait...");
Thread background = new Thread(new Runnable(){     

                        @Override
                        public void run() {
                            readFeed(nameUrl);
                            Message msg = handler.obtainMessage();
                            msg.arg1=FEED_LOAD_FINISHED;
                            handler.sendMessage(msg);
                           
                        }
                       
                    });
                    background.start();
                    -.....
......

  Now you are starting a progress dialog and then starting the thread called background to run the function readFeed. When the function is completed, the thread sends a message to the handler.

Here is the handler code
 public class FeedReadHandler extends Handler{
       @Override
       public void handleMessage(Message msg){
           Log.d("SHOWRSS","i think i received a message");
           if(msg.arg1==FEED_LOAD_FINISHED){
               pd.dismiss();
               .....

               .....
              
           }
          
       }
   }

So the handler when receives the message from our background thread, on receiving this message it closes the progress- dialog.

How to use a DatePickerDialog

You do not have a direct widget for date entry. You should use an edittext and enter the date in yyyy-mm-dd format. Instead you can use a datepicker dialog. This dialog can be displayed when user types on the editText which should store the date

If your edit text is etDialogDate,

etDialogDate.setOnClickListener(new OnClickListener() {
          
            @Override
            public void onClick(View v) {
                String dateText = ((TextView)v).getText().toString();
                int year,month,day;
                String temp[]=dateText.split("-");
                year = Integer.valueOf(temp[0]);
                month = Integer.valueOf(temp[1]);
                day= Integer.valueOf(temp[2]);
                DatePickerDialog dtpkrdlg = new 
                     DatePickerDialog(ExpenseList.this, 0, 
                      new  DateSetListener(), year, month-1, day);
                dtpkrdlg.show();
              
            }});

Now this will show the datepicker dialog with initial value as date shown in edittext.

Once the date is set in the dialog it will call the callback function using DateSetListener. Let us define this DateSetListener class as follows

class DateSetListener implements DatePickerDialog.OnDateSetListener{

        @Override
        public void onDateSet(DatePicker view, 
                              int year, int monthOfYear,
                               int dayOfMonth) {
           
             etDialogDate.setText(""+year+"-"+
               (monthOfYear+1)+"-"+dayOfMonth);
           
        }
       
    }

Now any date set in the dialog is displayed back in our edittext widget.

Observe that we have used monthOfYear+1 because in Android Jan is 0 not 1.