Friday, 21 February 2014

HighLighting the Selected List Item using SingleTon Pattern in Android

 Instant Adapter Library Add to your Eclipse Project

 https://github.com/ragunathjawahar/instant-adapter

activity_main.xml


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ListView
        android:id="@+id/demo_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"  />

</RelativeLayout>


list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/par_relative"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="12dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/imageView1"
        android:text="Large Text"
        android:layout_centerVertical="true"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>


Contact.java

package com.example.insta;

public class Contact {

    private int drawableResId;
    private String contactName;

    public Contact(int drawableResId, String contactName) {
        this.drawableResId = drawableResId;
        this.contactName = contactName;
    }

    public int getDrawableResId() {
        return drawableResId;
    }

    public void setDrawableResId(int drawableResId) {
        this.drawableResId = drawableResId;
    }

    public String getContactName() {
        return contactName;
    }

    public void setContactName(String contactName) {
        this.contactName = contactName;
    }
}

GlobalSingleTon.java

package com.example.insta;
public class GlobalSingleTon {

    private static int position = -1;
    private GlobalSingleTon globalSingleton = null;

    private GlobalSingleTon() {}

    public static synchronized GlobalSingleTon getInstance() {  

         if(globalSingleton == null) {
                     globalSingleton =  new GlobalSingleTon();
         }
         return globalSingleton;
    }

    public static int getPosition() {
        return position;
    }

    public static void setPosition(int position) {
        GlobalSingleTon.position = position;
    }   
}

MainActivity.java


package com.example.insta;

import com.mobsandgeeks.adapters.InstantAdapter;
import com.mobsandgeeks.adapters.ViewHandler;

import android.app.Activity;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity implements ViewHandler<Contact> {

    private ListView mContactListView;

    private List<Contact> mContactList;

    private InstantAdapter<Contact> mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContactListView = (ListView)findViewById(R.id.demo_list);
        mContactList = new ArrayList<Contact>();
        mContactList.add(new Contact(R.drawable.ic_launcher, "Rajesh"));
        mContactList.add(new Contact(R.drawable.ic_launcher, "Rajesh"));
        mContactList.add(new Contact(R.drawable.ic_launcher, "Rajesh"));
        mContactList.add(new Contact(R.drawable.ic_launcher, "Rajesh"));
        mContactList.add(new Contact(R.drawable.ic_launcher, "Rajesh"));

        mAdapter = new InstantAdapter<Contact>(this, R.layout.list_item, Contact.class,
                mContactList);
        mAdapter.setViewHandler(R.id.imageView1, this);
        mAdapter.setViewHandler(R.id.textView1, this);
        mAdapter.setViewHandler(R.id.par_relative, this);

        mContactListView.setAdapter(mAdapter);
    }

    @Override
    public void handleView(ListAdapter adapter, View parent, final View view, Contact contact,
            int position) {
        switch (view.getId()) {
            case R.id.imageView1:
                ((ImageView)view).setBackgroundResource(contact.getDrawableResId());
                break;
            case R.id.textView1:
                ((TextView)view).setText(contact.getContactName());
                break;
            case R.id.par_relative:
                final int pos = position;
                ((RelativeLayout)view).setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        GlobalSingleTon.setPosition(pos);
                        mAdapter.notifyDataSetChanged();
                      
                    }
                });
        }
      
        if(position == GlobalSingleTon.getPosition()) {
            view.setBackgroundColor(Color.GREEN);
        } else {
            view.setBackgroundColor(Color.WHITE);
        }
    }
}


output :



Source Code :  Coming Soon..