How to customize listview using baseadapter
main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" > </ListView></RelativeLayout>
custom.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" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="255dp" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Video1" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#339966" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/detail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="video1" android:textColor="#606060" /> </LinearLayout> </LinearLayout> <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> </LinearLayout></LinearLayout>
main.java:
package com.example.sample;import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends Activity { ListView l1; String[] t1={"video1","video2"}; String[] d1={"lesson1","lesson2"}; int[] i1 ={R.drawable.ic_launcher,R.drawable.ic_launcher}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); l1=(ListView)findViewById(R.id.list); l1.setAdapter(new dataListAdapter(t1,d1,i1)); } class dataListAdapter extends BaseAdapter { String[] Title, Detail; int[] imge; dataListAdapter() { Title = null; Detail = null; imge=null; } public dataListAdapter(String[] text, String[] text1,int[] text3) { Title = text; Detail = text1; imge = text3; } public int getCount() { // TODO Auto-generated method stub return Title.length; } public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } public long getItemId(int position) { // TODO Auto-generated method stub return position; } public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = getLayoutInflater(); View row; row = inflater.inflate(R.layout.custom, parent, false); TextView title, detail; ImageView i1; title = (TextView) row.findViewById(R.id.title); detail = (TextView) row.findViewById(R.id.detail); i1=(ImageView)row.findViewById(R.id.img); title.setText(Title[position]); detail.setText(Detail[position]); i1.setImageResource(imge[position]); return (row); } }}
Try this.
public class ListElementAdapter extends BaseAdapter{ String[] data; Context context; LayoutInflater layoutInflater; public ListElementAdapter(String[] data, Context context) { super(); this.data = data; this.context = context; layoutInflater = LayoutInflater.from(context); } @Override public int getCount() { return data.length; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView= layoutInflater.inflate(R.layout.item, null); TextView txt=(TextView)convertView.findViewById(R.id.text); txt.setText(data[position]); return convertView; }}
Just call ListElementAdapter in your Main Activity and set Adapter to ListView.
Create your own BaseAdapter class and use it as following.
public class NotificationScreen extends Activity{@Overrideprotected void onCreate_Impl(Bundle savedInstanceState){ setContentView(R.layout.notification_screen); ListView notificationList = (ListView) findViewById(R.id.notification_list); NotiFicationListAdapter notiFicationListAdapter = new NotiFicationListAdapter(); notificationList.setAdapter(notiFicationListAdapter); homeButton = (Button) findViewById(R.id.home_button);}}
Make your own BaseAdapter class and its separate xml file.
public class NotiFicationListAdapter extends BaseAdapter{private ArrayList<HashMap<String, String>> data;private LayoutInflater inflater=null;public NotiFicationListAdapter(ArrayList data){this.data=data; inflater =(LayoutInflater)baseActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}public int getCount() { return data.size();}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.notification_list_item, null); ImageView compleatImageView=(ImageView)vi.findViewById(R.id.complet_image); TextView name = (TextView)vi.findViewById(R.id.game_name); // name TextView email_id = (TextView)vi.findViewById(R.id.e_mail_id); // email ID TextView notification_message = (TextView)vi.findViewById(R.id.notification_message); // notification message compleatImageView.setBackgroundResource(R.id.address_book); name.setText(data.getIndex(position)); email_id.setText(data.getIndex(position)); notification_message.setTextdata.getIndex(position)); return vi;} }
BaseAdapter xml file.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/inner_layout"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginBottom="5dp"android:layout_marginLeft="10dp"android:layout_weight="4"android:background="@drawable/list_view_frame"android:gravity="center_vertical"android:padding="5dp" ><TextView android:id="@+id/game_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Game name" android:textColor="#FFFFFF" android:textSize="15dip" android:textStyle="bold" android:typeface="sans" /><TextView android:id="@+id/e_mail_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/game_name" android:layout_marginTop="1dip" android:text="E-Mail Id" android:textColor="#FFFFFF" android:textSize="10dip" /><TextView android:id="@+id/notification_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/game_name" android:layout_toRightOf="@id/e_mail_id" android:paddingLeft="5dp" android:text="Notification message" android:textColor="#FFFFFF" android:textSize="10dip" /><ImageView android:id="@+id/complet_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginBottom="30dp" android:layout_marginRight="10dp" android:src="@drawable/complete_tag" android:visibility="invisible" /></RelativeLayout>
Change it accordingly and use.