Reputation: 970
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
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
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
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
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
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