Johan
Johan

Reputation: 35194

Populating custom listview

I would like to create a listview with custom rows. I have created a class that extends ListActivity and an XML for each row item. I've also added a method that generates some dummy data. But this is where I'm stuck. How do I call this from my main class and populate a listview in my main.xml?

CustomListView.java

public class CustomListView extends ListActivity  {

private ArrayList<HashMap<String,String>> list;

public CustomListView(){

    list =  new ArrayList<HashMap<String,String>>();

    SimpleAdapter adapter = new SimpleAdapter(
            this,
            list,
            R.layout.custom_list_item,
            new String[] {"pen","price","color"},
            new int[] {R.id.text1,R.id.text2, R.id.text3});

    populateList();

    setListAdapter(adapter);

}

private void populateList() {

    HashMap<String,String> temp = new HashMap<String,String>();
    temp.put("pen","MONT Blanc");
    temp.put("price", "200.00$");
    temp.put("color", "Silver, Grey, Black");
    list.add(temp);
    HashMap<String,String> temp1 = new HashMap<String,String>();
    temp1.put("pen","Gucci");
    temp1.put("price", "300.00$");
    temp1.put("color", "Gold, Red");
    list.add(temp1);
    HashMap<String,String> temp2 = new HashMap<String,String>();
    temp2.put("pen","Parker");
    temp2.put("price", "400.00$");
    temp2.put("color", "Gold, Blue");
    list.add(temp2);
    HashMap<String,String> temp3 = new HashMap<String,String>();
    temp3.put("pen","Sailor");
    temp3.put("price", "500.00$");
    temp3.put("color", "Silver");
    list.add(temp3);
    HashMap<String,String> temp4 = new HashMap<String,String>();
    temp4.put("pen","Porsche Design");
    temp4.put("price", "600.00$");
    temp4.put("color", "Silver, Grey, Red");
    list.add(temp4);

}

}

custom_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView android:id="@+id/text1" 
android:textSize="16sp" 
android:textStyle="bold" 
android:textColor="#FFFF00" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"/>

<TextView android:id="@+id/text2"
android:textSize="12sp" 
android:textStyle="bold" 
android:layout_width="wrap_content" 
android:layout_height="fill_parent"/>

<TextView android:id="@+id/text3" 
android:typeface="sans"
android:textSize="14sp"
android:textStyle="italic"
android:layout_width="wrap_content" 
android:layout_height="wrap_content"/>

Upvotes: 1

Views: 536

Answers (2)

Mohsin Naeem
Mohsin Naeem

Reputation: 12642

you are 50% done some steps are remaining

1 remove the constructor for CustomListView. No need of this.

2 override the onCreate method

public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    list = new ArrayList<HashMap<String, String>>();
    populateList();
    SimpleAdapter adapter = new SimpleAdapter(this, list,
            R.layout.custom_list_item, new String[] { "pen", "price",
                    "color" }, new int[] { R.id.text1, R.id.text2,
                    R.id.text3 });
    setListAdapter(adapter);
}

3 Add your activity in manifest file like

<activity
        android:name=".CustomListView"
        />

4 How to start from main Activity.you want this on a button click? then you can use Intents

startActivity(new Intent(yourMainActivity.this,CustomListView.class))

Upvotes: 2

thepoosh
thepoosh

Reputation: 12587

Creating a custom List cell means actually that you create a custom adapter.

You choose the type of data source for your list, than create an adapter for that and show the information as you want.

what usually happens is that you need to implement the getView method and inflate your custom View instead of the regular one.

here is a code sample for a custom adapter:

public class LazyAdapter extends BaseAdapter {

    private Activity activity;
    private String[] data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader; 

    public LazyAdapter(Activity a, String[] d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
    }

    public int getCount() {
        return data.length;
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.item, null);

        TextView text=(TextView)vi.findViewById(R.id.text);;
        ImageView image=(ImageView)vi.findViewById(R.id.image);
        text.setText("item "+position);
        imageLoader.DisplayImage(data[position], image);
        return vi;
    }
}

try reading vogalla's tutorial on listView and Adapter

Upvotes: 1

Related Questions