I have a Sectioned ListView
in which the headers like "A" , "B" ,..."Z" are are showing at prpoer position when i first loads the app and scroll down the list. But whenever I scroll-up (back to top) the List
, then the positions of header are changed and sometimes overlaping to other catagories.
My customr Adapter
is :
private class MySimpleCursorAdapter extends SimpleCursorAdapter {
Holder holder = null;
public MySimpleCursorAdapter(Context context, int layout, Cursor cur,
String[] from, int[] to, int flag) {
super(context, layout, cur, from, to, flag);
}
public String getTitle(String contName) {
return contName.substring(0, 1);
}
@Override
public void bindView(View view, Context context, Cursor mCursor) {
holder =new Holder();
final int curPosition = mCursor.getPosition();
String cont_Name = mCursor.getString(mCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
holder.titleText= (TextView) view.findViewById(R.id.section_title);
holder.contactTitle= (TextView)view.findViewById(R.id.textView1);
holder.contactDetail = (TextView)view.findViewById(R.id.textView2);
holder.myImage = (ImageView) view.findViewById(R.id.imageView1);
Log.d("Cursor Postion " , ""+ curPosition);
if( curPosition == 0 ){
holder.titleText.setText(getTitle(cont_Name));
holder.titleText.setVisibility(View.VISIBLE);
keyWord = getTitle(cont_Name);
}
else if (keyWord.equalsIgnoreCase(getTitle(cont_Name))){
holder.titleText.setVisibility(View.GONE);
keyWord = getTitle(cont_Name);
}else if (keyWord != getTitle(cont_Name)){
holder.titleText.setVisibility(View.VISIBLE);
holder.titleText.setText(getTitle(cont_Name));
keyWord = getTitle(cont_Name);
}else{
holder.titleText.setVisibility(View.GONE);
}
holder.contactTitle.setText(mCursor.getString(mCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
holder.contactDetail.setText(mCursor.getString(mCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
}
}
Whereas, my layout
is:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/section_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:textStyle="bold"
android:background="@android:color/holo_blue_bright"
style="?android:attr/listSeparatorTextViewStyle" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/section_title"
android:contentDescription="@string/contact_img" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/imageView1"
android:layout_marginLeft="17dp"
android:layout_below="@+id/section_title"
android:layout_toRightOf="@+id/imageView1"
android:text="@+id/textView1"
android:textColor="@color/Black"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_marginLeft="17dp"
android:layout_toRightOf="@+id/imageView1"
android:paddingBottom="8dp"
android:text="@+id/textView2" />
</RelativeLayout>
Finally Got my answer my own after two weeks...my if-else
conditions were too complex , so i make comparison on some different criteria.
if (mCursor.getPosition() > 0 && mCursor.moveToPrevious())
{
preName = mCursor.getString(mCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
mCursor.moveToNext();
}
else if(mCursor.getPosition() == 0)
{
preName = null;
}
else{
preName = null;
}
if(preName != null){
preTitle = getTitle(preName);
}
//===============================================================================
/*
* Setting Header And Contact Details
*/
//===============================================================================
if(mCursor.isFirst()){
holder.titleText.setVisibility(View.VISIBLE);
holder.titleText.setText(itemTitle);
}
else if(preName != null){
if(! itemTitle.equalsIgnoreCase(preTitle))
{
holder.titleText.setVisibility(View.VISIBLE);
holder.titleText.setText(itemTitle);
}else{
holder.titleText.setVisibility(View.GONE);
}
}
holder.contactTitle.setText(mCursor.getString(mCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
holder.contactDetail.setText(mCursor.getString(mCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));