суббота, 20 апреля 2013 г.

Android ExpandableListView Scrolls expanded an unexpected way.

When you press on group in ExpandableListView it's shows to you last child elements, but we expected top. Very simple way to solve this.

Put into xml:

android:transcriptMode="disabled"

instead:

android:transcriptMode="alwaysScroll"

суббота, 30 марта 2013 г.

The problem with an external camera in Android using MediaStore.ACTION_IMAGE_CAPTURE

We start native Camera using this code (short variant):

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, NUMBER);

Don't forget Manifest.xml

<activity
android:name=".YourActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden"
</activity>

In  OnActivityResult we save information got from our external Camera, but after this in some devices we have this issue:
OnActivityResult
OnResume
OnPause
OnDestroy - there we lose all information from Camera
OnCreate
OnResume


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      mObject.setImagePath(....); - for example
}

Solution in two steps:

Step 1: Add OnSaveInstanceState and onRestoreInstanceState to your Class.

YourObject mObject = new YourObject();


@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  if(mObject != null) savedInstanceState.putSerializable(KEY, mObject);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  YourObject obj = (YourObject) savedInstanceState.getSerializable(KEY);
  if(obj != null) mObject = obj;
}


Step 2: Add piece of code to the OnCreate method.


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

YourObject obj = null;
try {
obj = (CarsDbModel) savedInstanceState.getSerializable(KEY);
} catch(NullPointerException e) {

}
 
if(car != null) {
      mObject = car;
}


After this code we will have this queue:
OnResume
OnPause
OnSaveInstanceState
OnDestroy
OnCreate - restore Correct Object

onRestoreInstanceState

OnResume


суббота, 28 апреля 2012 г.

Tips - TabWidget fixed width

I didn't find any info about TabWidget fixed with in XML.

Thats why I use this, after create TabHost and added all Tabs:

int dips = 100; //Width in dip

int pixels = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) dips, getResources().getDisplayMetrics());
TabWidget widget = mTabHost.getTabWidget();
for (int i = 0; i < widget.getChildCount(); ++i) {
     View v = widget.getChildAt(i);
     v.getLayoutParams().width = pixels;

}



  

суббота, 11 июня 2011 г.

Получение email из контактной книги Android

Строка такого вида чтоб получить список email не работает, хотя во многих статьях ее используют:

Intent intent=new Intent(Intent.ACTION_PICK);
intent.setData(ContactsContract.CommonDataKinds.Email.CONTENT_URI);
startActivityForResult(intent, some_number);

Видимо работала до версии < Android 2.0, так что пришлось чуть по шаманить, вариант получился не лучший так как мы не видим сам mail а видим только контакт.
Если у вас есть вариант как увидеть mail в контакт листе напишите в комментариях.
Код:
//Какой то обработчик нажатия
public boolean onLongClick(View arg0) {
Uri a = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;

Intent i=new Intent(Intent.ACTION_PICK, a);
startActivityForResult(i, PICK_REQUEST_MAIL); }
...
//Получаем результат

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if ((requestCode == PICK_REQUEST_MAIL) && (resultCode == RESULT_OK)) {
ContentResolver cr = getContentResolver();
Cursor pCur_id = cr.query(data.getData(), null, null, null, null);
        String id = null;
if(pCur_id != null)
 while (pCur_id.moveToNext()) {
 id = pCur_id.getString(pCur_id.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
       }
pCur_id.close();
//Важная строка, по ID контакта находим наш MAIL в запросе.
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID+ "=" + id, null, null);

if(pCur != null)
 while (pCur.moveToNext()) {
String mail = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
//Тут заносим наш mail куда нам надо например в EditText
        mailEditText.setText(mail);
 }
         pCur.close();
        }
        super.onActivityResult(requestCode, resultCode, data);
    }