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