Skip to content Skip to sidebar Skip to footer

Listview, And Arrayadapter Issue, How Do I Proceed?

I have a Product Class, Which has three fields:- id name price In my code I create a List productList = Collections.synchronizedList(new ArrayList()

Solution 1:

You should extend BaseAdapter and provide your own layout for each item (getView()). Don't forget to manage the view recycling and maybe use the ViewHolder paradigm.

EDIT

I didn't use a lot the ListAdpater, because it binds to a ListView only. Sometimes I need an adapter for a GridView, and the BaseAdapter gives me enough freedom for all use cases.

Example of BaseAdapter:

publicclassFanAdapterextendsBaseAdapter {

    private List<Fan> mFans;
    private Activity mContext;

    publicFanAdapter(Activity context, List<Fan> fans) {
        mContext = context;
        mFans = fans;
    }

    privateclassViewHolder {

        public ImageView image;
        public TextView firstName;
        public TextView lastName;   
    }

    @Overridepublic View getView(int position, View view, ViewGroup container) {
        if (view == null) {
            view = LayoutInflater.from(mContext).inflate(R.layout.fan_item, container, false);
        }

        ViewHolderviewHolder= (ViewHolder) view.getTag();
        if(viewHolder == null){
            viewHolder = newViewHolder();
            viewHolder.image = (ImageView) view.findViewById(R.id.image);
            viewHolder.firstName = (TextView) view.findViewById(R.id.firstname);
            viewHolder.lastName = (TextView) view.findViewById(R.id.lastname);
            view.setTag(viewHolder);
        }

        // setting here values to the fields of my items from my fan object
        viewHolder.firstName.setText(fan.getFirstName());
        (...)


        return view;
    }

    @OverridepublicintgetCount() {
        if (mFans != null) {
            return mFans.size();
        } else {
            return0;
        }
    }

    @Overridepublic Object getItem(int position) {
        return mFans.get(position);
    }

    @OverridepubliclonggetItemId(int position) {
        return position;
    }
}

You can use it with an Activity containing a ListView or a ListActivity (having in its layout a ListView with a special id):

<ListView
        android:id="@id/android:list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:cacheColorHint="@android:color/transparent" />

This way, your ListActivity that will inflate the view will be able to make a findViewById() call and getListView() will return this internal listView. It's a small hack, you can put your own listView with another id and make the findViewById() yourself. For The ListActivity, there's another hack: if the ListActivity finds an empty view with again a special id, it will be shown when the list is empty:

<include
    android:id="@+id/empty"
    layout="@layout/empty"
    android:visibility="gone"
    android:layout_gravity="center" />

Then on your listView, whether you used an Activity or ListActivity, you can set your adapter on the ListView:

getListView().setAdapter(new FanAdapter(this, myFanDataArray)));

Solution 2:

in getView(...) method you have to check price and set color of row...

see this customized listview..

http://samir-mangroliya.blogspot.in/p/android-customized-listview.html

i set row color as per odd and even row and

you can set checking price...

if(price < 1000){
       row.setBackgroundColor(Color.RED);
}else{
       row.setBackgroundColor(Color.Yellow);
}

Post a Comment for "Listview, And Arrayadapter Issue, How Do I Proceed?"