Basic ListActivity No Layout With HashMap
Using Android Studio 1.4
Application Name: MyListActivityNoLayoutHashMap1
Select API 14:Android 4.0 (IceCreamSandwich)
Follow the wizard to create New Empty Activity.
Deselect “Generate Layout File”
We do not require ListView Layout as List Activity has a built-in layout. However, we need to define a Row Layout and Custom Adapter in order to implement HashMap structure |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/logo" android:layout_width="55dp" android:layout_height="70dp" android:layout_alignParentLeft="true" android:scaleType="fitXY"/> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/logo" android:textSize="18sp"/> <TextView android:id="@+id/region" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/logo" android:layout_below="@id/name"/> </RelativeLayout> |
Download MyListActivityNoLayoutHashMap1-drawable.zip and place the images into res/drawable folder.
package com.notarazi.mylistactivitynolayouthashmap1; import android.app.ListActivity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import java.util.HashMap; public class MainActivity extends ListActivity { //the ArrayList that will hold the data to be displayed in the ListView ArrayList<HashMap<String, Object>> companies; LayoutInflater inflater; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //not necessary as ListActivity has an //implicitly defined Layout(with a ListView of course) //setContentView(R.layout.main); //get the LayoutInflater for inflating the customomView inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); //these arrays are just the data that //I'll be using to populate the ArrayList //You can use our own methods to get the data String names[] = {"Toyota", "Honda", "Hyundai", "Kia","Proton", "Mercedes", "Lada", "Skoda",}; String regions[] = {"Asia", "Asia", "Asia", "Asia", "Asia", "Europe", "Europe", "Europe"}; Integer[] logos = {R.drawable.car_toyota, R.drawable.car_honda, R.drawable.car_hyundai, R.drawable.car_kia, R.drawable.car_proton, R.drawable.car_mercedes,R.drawable.car_lada, R.drawable.car_skoda}; ArrayList companies = new ArrayList<HashMap<String, Object>>(); //HashMap for storing a single row HashMap<String, Object> temp; //total number of rows in the ListView int noOfcompanies = names.length; //now populate the ArrayList companies for (int i = 0; i < noOfcompanies; i++) { temp = new HashMap<String, Object>(); temp.put("name", names[i]); temp.put("region", regions[i]); temp.put("logo", logos[i]); //add the row to the ArrayList companies.add(temp); } //create the adapter //first param-the context //second param-the id of the layout file //you will be using to fill a row //third param-the set of values that // will populate the ListView CustomAdapter adapter = new CustomAdapter(this, R.layout.row_layout, companies); //finally,set the adapter to the default ListView setListAdapter(adapter); } //define your custom adapter private class CustomAdapter extends ArrayAdapter<HashMap<String, Object>> { public CustomAdapter(Context context, int textViewResourceId, ArrayList<HashMap<String, Object>> Strings) { //let android do the initializing :) super(context, textViewResourceId, Strings); } //class for caching the views in a row private class ViewHolder { ImageView logo; TextView name,region; } ViewHolder viewHolder; @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView==null) { //inflate the custom layout convertView=inflater.inflate(R.layout.row_layout, null); viewHolder=new ViewHolder(); //cache the views viewHolder.logo=(ImageView) convertView.findViewById(R.id.logo); viewHolder.name=(TextView) convertView.findViewById(R.id.name); viewHolder.region=(TextView) convertView.findViewById(R.id.region); //link the cached views to the convertview convertView.setTag(viewHolder); } else viewHolder=(ViewHolder) convertView.getTag(); int logoId=(Integer) companies.get(position).get("logo"); //set the data to be displayed viewHolder.logo.setImageDrawable(getResources().getDrawable(logoId)); viewHolder.name.setText(companies.get(position).get("name").toString()); viewHolder.region.setText(companies.get(position).get("region").toString()); //return the view to be displayed return convertView; } } } |
OUTCOME.
MyListActivityNoLayoutHashMap1.zip
http://androidcocktail.blogspot.my/2012/03/custom-listview-in-android.html