Milan Gajera
Milan Gajera

Reputation: 970

How can i set Hashmap data into listview in android?

I have generic hashmap. I need to fill all the items of hashmap into listview.What is the adapter class.

Here, is my adapter class

package com.domore.settextviewdynamically;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
 * Created by MY WORLD on 1/11/2016.
 */
public class MyAdpter extends BaseAdapter {
    private final ArrayList mData;

//    ArrayList<HashMap<String,String>> map;
    private Context context;
    private LayoutInflater inflater;
    public MyAdpter(Context context,HashMap<String,String> map) {
        mData = new ArrayList();
        mData.addAll(map.entrySet());
//        this.map=map;
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Map.Entry<String,String> getItem(int position) {
        return (Map.Entry) mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }
    public class Holder{
        TextView overs;
        TextView balls;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final View result;

        if (convertView == null) {
            result = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_adapter_item, parent, false);
        } else {
            result = convertView;
        }

        Map.Entry<String, String> item = getItem(position);

        ((TextView) result.findViewById(R.id.overs)).setText(item.getKey());
        ((TextView) result.findViewById(R.id.balls)).setText(item.getValue());

        return result;
    }
}

Here is the code which i call my adapter

adapter=new MyAdpter(this,hashMap);
lst.setAdapter(adapter);

Please, help me to solve out this problem. I got only last element of hashmap.

Upvotes: 1

Views: 1892

Answers (5)

user4302606
user4302606

Reputation:

To get Data from HashMap:

     String data,key;
            for(String keys:mData.keyset())
            {
             key=keys;
             data=mData.get(key);

           ((TextView) result.findViewById(R.id.overs)).setText(key);
            ((TextView) result.findViewById(R.id.balls)).setText(data);
 }

Try this way..good luck

Upvotes: 2

peeyush pathak
peeyush pathak

Reputation: 3663

add this in your constructor:mData.addAll(map.keySet()); instead of current addAll then in your getView method use this map.get(mdata.get(position)) to get your value.

Upvotes: 0

AndreyICE
AndreyICE

Reputation: 3624

Don't forget to use ViewHolder

Adapter sources:

package com.example.some.test;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

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

public class MyAdapter extends BaseAdapter {

private final List<Map.Entry<String, String>> mData;

private final LayoutInflater inflater;

public MyAdapter(Context context, Map<String, String> map) {
    inflater = LayoutInflater.from(context);
    mData = new ArrayList<>(map.entrySet());
}

@Override
public int getCount() {
    return mData.size();
}

@Override
public Map.Entry<String, String> getItem(int position) {
    return mData.get(position);
}

@Override
public long getItemId(int position) {
    return mData.get(position).getKey().hashCode();
}

public class ViewHolder {
    TextView overs;
    TextView balls;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    final ViewHolder viewHolder;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.my_adapter_item, parent, false);
        viewHolder = new ViewHolder();
        viewHolder.overs = (TextView) convertView.findViewById(R.id.overs);
        viewHolder.balls = (TextView) convertView.findViewById(R.id.balls);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    Map.Entry<String, String> item = getItem(position);

    viewHolder.overs.setText(item.getKey());
    viewHolder.balls.setText(item.getValue());

    return convertView;
}

Activity (LinkedHashMap used for data storage):

    Map<String, String> data = new LinkedHashMap<>();

    data.put("AAA", "111");
    data.put("BBB", "222");
    data.put("CCC", "333");
    data.put("DDD", "444");
    data.put("EEE", "555");
    data.put("FFF", "666");
    data.put("GGG", "777");
    ....
    data.put("ZZZ", "262626");

    final ListView listView = (ListView) findViewById(R.id.list_view);
    final MyAdapter adapter = new MyAdapter(this, data);
    listView.setAdapter(adapter);

Upvotes: 0

user1140237
user1140237

Reputation: 5045

At the time of creating ArrayList<HashMap<String, String>> in HashMap you need to specify key & based on that key you can display data in getView Here in this example i have given first_name & last_name as HashMap key for sample.

private class ListViewCustomAdapter extends BaseAdapter {
        Context context;
        int totalDisplayDatasize = 0;
        ArrayList<HashMap<String, String>> codeLeanChapterList;

        public ListViewCustomAdapter(Context context,
                                     ArrayList<HashMap<String, String>> codeLeanChapterList) {
            this.context = context;
            this.codeLeanChapterList = codeLeanChapterList;
            if (this.codeLeanChapterList != null)
                totalDisplayDatasize = this.codeLeanChapterList.size();
        }

        @Override
        public int getCount() {
            // this could be one of the reason for not showing listview.set
            // total data length for count
            return totalDisplayDatasize;
        }

        @Override
        public HashMap<String, String> getItem(int i) {
            return this.codeLeanChapterList.get(i);
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        private class Holder {
            TextView textView1, textView2;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Holder holder = null;
            View view = convertView;
                /*
                 * First time for row if view is not created than inflate the view
                 * and create instance of the row view Cast the control by using
                 * findview by id and store it in view tag using holder class
                 */
            if (view == null) {
                holder = new Holder();
                // / No need to create LayoutInflater instance in
                // constructor

                convertView = LayoutInflater.from(this.context).inflate(
                        R.layout.listitem, parent,false);

                holder.textView1 = (TextView) convertView
                        .findViewById(R.id.textView1);
                holder.textView2 = (TextView) convertView
                        .findViewById(R.id.textView2);

                convertView.setTag(holder);
            } else {
                    /*
                     * Here view next time it wont b null as its created and
                     * inflated once and in above if statement its created. And
                     * stored it in view tag. Get the holder class from view tag
                     */
                holder = (Holder) convertView.getTag();

            }

            holder.textView2.setText("Key Name (First Name): "
                    + codeLeanChapterList.get(position).get("first_name"));
            String flagChar = codeLeanChapterList.get(position).get("last_name");

            return convertView;
        }
    }

Upvotes: 1

Krunal Patel
Krunal Patel

Reputation: 61

Set keys = mData.keyset();



     for (Iterator i = keys.iterator(); i.hasNext() 
       {
           String key = (String) i.next();
           String value = (String) map.get(key);
             ((TextView) result.findViewById(R.id.overs)).setText(key);
            ((TextView) result.findViewById(R.id.balls)).setText(value);

       }

Upvotes: 0

Related Questions