1

I am trying to implement custom adapter for my activity which will populate the listview from two ArrayLists. However I am totally confused as to what to do next ? Here is my code :

public class Offers extends Activity 
{
    ListView latesttrans;
    Boolean flagValue = false;

    ArrayList<String> listItems = new ArrayList<String>();
    ArrayList<String> listAddress = new ArrayList<String>();
    String[] addr;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_offers);
        latesttrans = (ListView) findViewById(R.id.listView1);

        Uri latesttransuri = Uri.parse("content://sms/inbox");
        Cursor latesttranscursor = getContentResolver().query(latesttransuri, new String[]{"_id","address","date","body"}, null, null, null);

        if(flagValue == false)
        {
            latesttranscursor.moveToFirst();
            flagValue = true;
        }

        String address = null,body = null;
        int i=0;

            while(latesttranscursor.moveToNext())
            {
                address=latesttranscursor.getString(1);
                long date = latesttranscursor.getLong(2);
                String sdate = millisToDate(date);
                body = latesttranscursor.getString(3);

                if(body.contains("FREE"))
                {
                    listItems.add(i,body);
                    listAddress.add(i,address);
                    i++;
                }
                else if(body.contains("unlimited"))
                {
                    listItems.add(i,body);
                    listAddress.add(i,address);
                    i++;
                }
                else if(body.contains("unlimited"))
                {
                    listItems.add(i,body);
                    listAddress.add(i,address);
                    i++;
                }
                else if(body.contains("OFF"))
                {
                    listItems.add(i,body);
                    listAddress.add(i,address);
                    i++;
                }
                else if(body.contains("off"))
                {
                    listItems.add(i,body);
                    listAddress.add(i,address);
                    i++;
                }
                else if(body.contains("lowest"))
                {
                    listItems.add(i,body);
                    listAddress.add(i,address);
                    i++;
                }
                else if(body.contains("save"))
                {
                    listItems.add(i,body);
                    listAddress.add(i,address);
                    i++;
                }
                else if(body.contains("CHEAPER"))
                {
                    listItems.add(i,body);
                    listAddress.add(i,address);
                    i++;
                }

            }

        latesttrans.setAdapter(new MyCustomAdapter(this));
    }
    public String millisToDate(long currentTime) 
    {
        String finalDate;
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(currentTime);
        Date date = calendar.getTime();
        finalDate = date.toString();
        return finalDate;
    }
} 

    class SingleRow2
    {
        String title;
        String description;
        SingleRow2(String title, String description)
        {
            this.title=title;
            this.description=description;
        }
    }
    class MyCustomAdapter extends BaseAdapter
    {
        int i=0;
        Boolean flagValue = false;
        ArrayList<SingleRow2> list;
        Context context;

        public MyCustomAdapter(Offers offers) 
        {
            // TODO Auto-generated constructor stub
        }

        public int getCount() 
        {
            return list.size();
        }

        public Object getItem(int arg0) 
        {
            // TODO Auto-generated method stub
            return list.get(arg0);
        }

        public long getItemId(int position) 
        {
            return position;
        }
        public View getView(int arg0, View arg1, ViewGroup viewGroup) 
        {
            LayoutInflater inflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View row = inflater.inflate(R.layout.single_row_offers,viewGroup,false);

            TextView addresstext = (TextView) row.findViewById(R.id.textViewSingleOffer1);
            TextView bodytext = (TextView) row.findViewById(R.id.textViewSingleOffer2);


            return (row);
        }
}

I am unable to implement the getView() method here ..Anyone any ideas ?

5
  • Each of this lists you need to use in you adapter ? ArrayList<String> listItems = new ArrayList<String>(); ArrayList<String> listAddress = new ArrayList<String>(); ? Commented Mar 11, 2015 at 9:48
  • Yes I'll be needing each of the list in my adapter. Commented Mar 11, 2015 at 9:50
  • ListItem to TextView bodytext ? and listAddress to TextView addresstext ? Commented Mar 11, 2015 at 9:51
  • Yes. You got that right. Commented Mar 11, 2015 at 9:53
  • Ok. I will write solution.Check in few minutes Commented Mar 11, 2015 at 9:54

2 Answers 2

5

Your adapter :

class TestAdapter extends BaseAdapter {

    ArrayList<String> listItem;
    ArrayList<String> listAddress;

    Context mContext;
    //constructor
    public TestAdapter(Context mContext, ArrayList<String> listItem, 
    ArrayList<String> listAddress) {
        this.mContext = mContext;
        this.listItem = listItem;
        this.listAddress = listAddress;
    }

    public int getCount() {
        return listItem.size();
    }

    public Object getItem(int arg0) {
        return null;
    }

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

    public View getView(int position, View arg1, ViewGroup viewGroup) 
    {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row = inflater.inflate(R.layout.single_row_offers, viewGroup, false);

        TextView addresstext = (TextView) row.findViewById(R.id.textViewSingleOffer1);
        TextView bodytext = (TextView) row.findViewById(R.id.textViewSingleOffer2);

        bodytext.setText(listItem.get(position));
        addresstext.setText(listAddress.get(position));


        return row;
    }
}

latesttrans.setAdapter(new TestAdapter(this, listItem,listAddress));
Sign up to request clarification or add additional context in comments.

Comments

2

Create class for holding the data.

public class Data {
    private String body;
    private String address;

    public Data(String body, String address) {
        this.body= body;
        this.address = address;
    }

    public String getBody() { return body; }

    public String getAddress() { return address; }
}

Then load data into that objects and add them to list.

public class Offers extends Activity {
    //...
    ArrayList<Data> dataList = new ArrayList<Data>();
    //...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_offers);
        latesttrans = (ListView) findViewById(R.id.listView1);

        Uri latesttransuri = Uri.parse("content://sms/inbox");
        Cursor latesttranscursor = getContentResolver().query(latesttransuri, new String[]{"_id","address","date","body"}, null, null, null);

        if(flagValue == false) {
            latesttranscursor.moveToFirst();
            flagValue = true;
        }

        String address = null,body = null;
        int i=0;

        while(latesttranscursor.moveToNext()) {
            address=latesttranscursor.getString(1);
            long date = latesttranscursor.getLong(2);
            String sdate = millisToDate(date);
            body = latesttranscursor.getString(3);

            if(body.contains("FREE") || body.contains("unlimited") || body.contains("OFF") || body.contains("off") || body.contains("lowest") || body.contains("save") || body.contains("CHEAPER"))
            {
                dataList.add(new Data(body, address));
            }
        }

        latesttrans.setAdapter(new MyCustomAdapter(this, dataList));
    }

    public String millisToDate(long currentTime) {
        String finalDate;
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(currentTime);
        Date date = calendar.getTime();
        finalDate = date.toString();
        return finalDate;
    }
}

Then you can create ArrayAdapter instead of BaseAdapter.

public class MyCustomAdapter extends ArrayAdapter<Data> {

    public class ViewHolder {
        TextView address;
        TextView body;
    }

    public MyCustomAdapter(Context context, List<Data> objects) {
        super(context, R.layout.single_row_offers, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row;
        ViewHolder viewHolder;

        if(convertView == null) {
            row = LayoutInflater.from(getContext()).inflate(R.layout.single_row_offers, parent, false);

            viewHolder = new ViewHolder();
            viewHolder.address = row.findViewById(R.id.textViewSingleOffer1);
            viewHolder.body = row.findViewById(R.id.textViewSingleOffer2);

            row.setTag(viewHolder);
        } else {
            row = convertView;
            viewHolder = (ViewHolder) row.getTag();
        }

        Data item = getItem(position);

        viewHolder.address.setText(item.getAddress());
        viewHolder.body.setText(item.getBody());

        return row;
    }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.