Advertisement
Help Keep Boards Alive. Support us by going ad free today. See here: https://subscriptions.boards.ie/.
If we do not hit our goal we will be forced to close the site.

Current status: https://keepboardsalive.com/

Annual subs are best for most impact. If you are still undecided on going Ad Free - you can also donate using the Paypal Donate option. All contribution helps. Thank you.
https://www.boards.ie/group/1878-subscribers-forum

Private Group for paid up members of Boards.ie. Join the club.

Android Custom Adapter

  • 10-11-2012 07:51PM
    #1
    Registered Users, Registered Users 2 Posts: 7,838 ✭✭✭


    I'm storing course module data in a database and retrieving them to show them in a listview.

    I want multiple database cells to be displayed in a single listitem, like this:

    ***********************
    * -----MyModules----- *
    * --------------------*
    * Code    Time   Day  *
    * --------------------*
    * Code    Time   Day  *
    * --------------------*
    * Code    Time   Day  *
    * --------------------*
    *                     *
    * |Button|   |Button| *
    ***********************
    

    I'm not getting any errors. All that is appearing is Code - not Time or Day, for example.

    Here is my Activity:

    [PHP]public class ListModule extends ListActivity implements OnClickListener {

    ListView listview;
    ModuleDatabase mDB = new ModuleDatabase(this);

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_module);

    Module[] mods = mDB.loadModules();

    listview = (ListView) findViewById(android.R.id.list);

    Module [] arr = new Module[] {
    new Module(1,"COMP23321", "Android", "Lecture", "Monday", "12.20", "B0.06", "This is a **** class"),
    new Module(2,"COMP36365", "OS", "Practical", "Thursday", "15.00", "B0.16", "This is a great practical"),
    new Module(3,"COMP16556", "Java", "Lecture", "Friday", "09.30", "B0.01", "This is a dog")
    };

    ModuleAdapter adapter = new ModuleAdapter(this, R.layout.module_list_row, mods);

    // Assign adapter to ListView
    adapter.notifyDataSetChanged();
    View header = getLayoutInflater().inflate(R.layout.module_list_header, null);
    View footer = getLayoutInflater().inflate(R.layout.module_list_footer, null);
    listview.addHeaderView(header);
    listview.addFooterView(footer);
    listview.setAdapter(adapter);
    }[/php]


    This is the adapter class:

    [PHP]package com.mcnulty.mytimetable;

    public class ModuleAdapter extends ArrayAdapter<Module> {

    Context context;
    int listViewResourceId;
    Module courses[] = null;

    public ModuleAdapter(Context context, int listViewResourceId, Module[] courses) {
    super(context, listViewResourceId, courses);
    // TODO Auto-generated constructor stub
    this.listViewResourceId = listViewResourceId;
    this.context = context;
    this.courses = courses;

    }

    public static class ModuleHolder
    {
    public TextView txtCode;
    // TextView txtName;
    public TextView txtType;
    public TextView txtDay;
    public TextView txtTime;
    public TextView txtLocation;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ModuleHolder holder;

    if(row == null)
    {
    LayoutInflater inflater = ((ListActivity)context).getLayoutInflater();
    row = inflater.inflate(listViewResourceId, parent, false);

    holder = new ModuleHolder();
    holder.txtCode = (TextView)row.findViewById(R.id.txtCode);
    // holder.txtName = (TextView)row.findViewById(R.id.txtName);
    holder.txtType = (TextView)row.findViewById(R.id.txtType);
    holder.txtDay = (TextView)row.findViewById(R.id.txtDay);
    holder.txtTime = (TextView)row.findViewById(R.id.txtTime);
    holder.txtLocation = (TextView)row.findViewById(R.id.txtLocation);

    row.setTag(holder);
    }
    else
    {
    holder = (ModuleHolder)row.getTag();
    }
    Module module = courses[position];

    holder.txtType.setText(module.getCode());
    holder.txtCode.setText(module.getType().substring(0, 1));
    holder.txtDay.setText(module.getDay().substring(0, 2));
    holder.txtTime.setText(module.getTime().toString());
    holder.txtLocation.setText(module.getLocation());

    return row;
    }


    }
    [/PHP]

    This is the listview row:

    [HTML]<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android&quot;
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="2dp">


    <TextView android:id="@+id/txtCode&quot;
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textStyle="bold"
    android:textSize="10dp"
    android:textColor="#ff0000"
    android:layout_marginTop="2dp"
    android:layout_marginBottom="2dp"/>

    <TextView android:id="@+id/txtType&quot;
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_vertical"
    android:layout_toRightOf="@id/txtCode&quot;
    android:textStyle="bold"
    android:textSize="10dp"
    android:textColor="#000000"
    android:layout_marginTop="2dp"
    android:layout_marginBottom="2dp"
    android:text="@string/class_type&quot;/>

    <TextView android:id="@+id/txtDay&quot;
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_vertical"
    android:layout_toRightOf="@id/txtType&quot;
    android:textStyle="bold"
    android:textSize="10dp"
    android:textColor="#000000"
    android:layout_marginTop="2dp"
    android:layout_marginBottom="2dp"
    android:text="@string/day&quot;/>

    <TextView android:id="@+id/txtTime&quot;
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_vertical"
    android:layout_toRightOf="@id/txtDay&quot;
    android:textStyle="bold"
    android:textSize="10dp"
    android:textColor="#ffff00"
    android:layout_marginTop="2dp"
    android:layout_marginBottom="2dp" />

    <TextView android:id="@+id/txtLocation&quot;
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_vertical"
    android:layout_toRightOf="@id/txtTime&quot;
    android:textStyle="bold"
    android:textSize="10dp"
    android:textColor="#000000"
    android:layout_marginTop="2dp"
    android:layout_marginBottom="2dp"/>

    </RelativeLayout>[/HTML]

    Let me know if I'm missing anything.

    Can anyone help with this?


Comments

  • Registered Users, Registered Users 2 Posts: 7,838 ✭✭✭Nulty


    I figured it out.

    the layout heights and widths of the TextViews were fill_parent and should be wrap_content. The first TextView was taking up all the parent space leaving none for the others


  • Registered Users, Registered Users 2 Posts: 124 ✭✭shanefitz360


    Good to see you figured it out :).

    You may also want to look at CursorAdapter


Advertisement