1. Code main layout
<?xml version="1.0" encoding="utf-8"?>
<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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
2. Tạo view item cho listview
<?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="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/img_illustration"
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_weight="2"
android:scaleType="centerCrop"
android:src="@drawable/image" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginLeft="10dp"
android:layout_weight="4"
android:orientation="vertical">
<TextView
android:id="@+id/txt_title_event"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="5"
android:gravity="center_vertical"
android:text="Xin đừng hái hoa"
android:textColor="@color/colorBlack"
android:textSize="20dp" />
<TextView
android:id="@+id/txt_author"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_weight="1"
android:padding="5dp"
android:text="Hồ Quang Hiếu"
android:textColor="@color/colorBlack" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<TextView
android:id="@+id/txt_count_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:drawableRight="@drawable/ic_visibility_black_24dp"
android:gravity="center_vertical"
android:padding="5dp"
android:text="1000"
android:textColor="@color/colorBlack" />
<TextView
android:id="@+id/txt_count_like"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:drawableRight="@drawable/ic_thumb_up_black_24dp"
android:gravity="center_vertical"
android:padding="5dp"
android:text="1000"
android:textColor="@color/colorBlack" />
<TextView
android:id="@+id/txt_count_dislike"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_weight="1"
android:drawableRight="@drawable/ic_thumb_down_black_24dp"
android:gravity="center_vertical"
android:padding="5dp"
android:text="1000"
android:textColor="@color/colorBlack" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="16dp"/>
</LinearLayout>
3. Tạo Entity để lưu dữ liệu từng dòng listview
package example.android.trinh.lap.customlistview.entities;
/**
* Created by thuynguyen on 1/26/16.
*/
public class Movie {
private String mName;
private String mAuthor;
private String mUrlImage;
private int mCountView;
private int mCountLike;
private int mCountDisLike;
public Movie() {}
public Movie(String name, String author, String urlImage, int countView, int countLike, int countDisLike) {
this.mName = name;
this.mAuthor = author;
this.mUrlImage = urlImage;
this.mCountView = countView;
this.mCountLike = countLike;
this.mCountDisLike = countDisLike;
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
public String getmAuthor() {
return mAuthor;
}
public void setmAuthor(String mAuthor) {
this.mAuthor = mAuthor;
}
public String getmUrlImage() {
return mUrlImage;
}
public void setmUrlImage(String mUrlImage) {
this.mUrlImage = mUrlImage;
}
public int getmCountView() {
return mCountView;
}
public void setmCountView(int mCountView) {
this.mCountView = mCountView;
}
public int getmCountLike() {
return mCountLike;
}
public void setmCountLike(int mCountLike) {
this.mCountLike = mCountLike;
}
public int getmCountDisLike() {
return mCountDisLike;
}
public void setmCountDisLike(int mCountDisLike) {
this.mCountDisLike = mCountDisLike;
}
}
4. Tạo adapter để truyền dữ liệu
package example.android.trinh.lap.customlistview.adapters;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import example.android.trinh.lap.customlistview.R;
import example.android.trinh.lap.customlistview.entities.Movie;
/**
* Created by thuynguyen on 1/26/16.
*/
public class MovieAdapter extends BaseAdapter {
private ArrayList<Movie> mMovieList;
private LayoutInflater mLayoutInflater;
private Context mContext;
public MovieAdapter(Context context, ArrayList<Movie> movies) {
this.mContext = context;
this.mMovieList = movies;
this.mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return mMovieList != null ? mMovieList.size() : 0;
}
@Override
public Object getItem(int position) {
return mMovieList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.item_listview, null);
holder.mImage = (ImageView) convertView.findViewById(R.id.img_illustration);
holder.mTitle = (TextView) convertView.findViewById(R.id.txt_title_event);
holder.mAuthor = (TextView) convertView.findViewById(R.id.txt_author);
holder.mCountView = (TextView) convertView.findViewById(R.id.txt_count_view);
holder.mCountLike = (TextView) convertView.findViewById(R.id.txt_count_like);
holder.mCountDisLike = (TextView) convertView.findViewById(R.id.txt_count_dislike);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Movie event = (Movie) getItem(position);
Picasso.with(mContext).load(event.getmUrlImage()).into(holder.mImage);
holder.mAuthor.setText(event.getmAuthor());
holder.mTitle.setText(event.getmName());
holder.mCountView.setText(String.valueOf(event.getmCountView()));
holder.mCountLike.setText(String.valueOf(event.getmCountLike()));
holder.mCountDisLike.setText(String.valueOf(event.getmCountDisLike()));
return convertView;
}
public class ViewHolder {
private ImageView mImage;
private TextView mTitle;
private TextView mAuthor;
private TextView mCountView;
private TextView mCountLike;
private TextView mCountDisLike;
}
}
5. Set adapte trong listview
package example.android.trinh.lap.customlistview.activities;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;
import example.android.trinh.lap.customlistview.R;
import example.android.trinh.lap.customlistview.adapters.MovieAdapter;
import example.android.trinh.lap.customlistview.entities.Movie;
public class MainActivity extends AppCompatActivity {
private ListView mListView;
private ArrayList<Movie> mMovieList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
setDataListView();
}
private void initView() {
mListView = (ListView) findViewById(R.id.listview);
}
private void initData() {
mMovieList = new ArrayList<>();
mMovieList.add(new Movie("Con Bướm Xuân", "Hồ Quang Hiếu", "http://www.musicmusic.vn/FileClip/Photos/Hoquanghieu-conbuomxuan.jpg", 1245, 1034, 20));
mMovieList.add(new Movie("Chắc ai đó sẽ về", "Sơn Tùng M - TP", "https://i.ytimg.com/vi/H-fI_h_pXw8/maxresdefault.jpg", 1234, 1050, 35));
mMovieList.add(new Movie("Con gái có quyền điệu", "Hari Won", "https://i.ytimg.com/vi/6IhL_-PuDxw/maxresdefault.jpg", 12454, 1040, 23));
mMovieList.add(new Movie("Âm thầm bên em", "Sơn Tùng M - TP", "http://media.doisongphapluat.com/423/2015/8/22/sontung01.PNG", 1245, 105, 56));
mMovieList.add(new Movie("Tìm em", "Hồ Quang Hiếu", "http://image.mp3.zdn.vn/thumb_video/e/9/e907aad8342bfdf25d1a1be89a94aa67_1393816732.jpg", 1245, 1000, 0));
mMovieList.add(new Movie("Buông đôi tay nhau ra", "Sơn Tùng M - TP", "http://xmedia-nguoiduatin.cdn.vccloud.vn/thumb_x500x/2015/12/3/235/buong-doi-tay-nhau-ra-son-tung-4-1449109597.jpg", 3556, 156, 53));
mMovieList.add(new Movie("Con Bướm Xuân", "Hồ Quang Hiếu", "http://img.saobiz.net/d/2015/07/nhung-hinh-anh-dep-cua-ca-si-Ho-Quang-Hieu.jpg", 1745, 1050, 54));
mMovieList.add(new Movie("Con Bướm Xuân", "Hồ Quang Hiếu", "http://img.saobiz.net/d/2015/07/nhung-hinh-anh-dep-cua-ca-si-Ho-Quang-Hieu.jpg", 175, 1000, 65));
mMovieList.add(new Movie("Con Bướm Xuân", "Sơn Tùng M - TP", "http://img.saobiz.net/d/2015/07/nhung-hinh-anh-dep-cua-ca-si-Ho-Quang-Hieu.jpg", 455, 1000, 6));
mMovieList.add(new Movie("Ngã Tư Đường", "Hồ Quang Hiếu", "http://imgs.vietnamnet.vn/Images/2012/05/04/17/20120504170346_7.jpg", 15745, 1030, 0));
mMovieList.add(new Movie("Hết yêu", "Hồ Quang Hiếu", "http://img.saobiz.net/d/2015/07/nhung-hinh-anh-dep-cua-ca-si-Ho-Quang-Hieu.jpg", 12745, 1045, 23));
mMovieList.add(new Movie("Không phải dạng vừa đâu", "Sơn Tùng M - TP", "https://i.ytimg.com/vi/gJkkPK0aXFo/maxresdefault.jpg", 75, 100, 0));
mMovieList.add(new Movie("Con Bướm Xuân", "Hồ Quang Hiếu", "http://img.saobiz.net/d/2015/07/nhung-hinh-anh-dep-cua-ca-si-Ho-Quang-Hieu.jpg", 125, 1000, 89));
mMovieList.add(new Movie("Con Bướm Xuân", "Hồ Quang Hiếu", "http://img.saobiz.net/d/2015/07/nhung-hinh-anh-dep-cua-ca-si-Ho-Quang-Hieu.jpg", 1677, 109, 78));
mMovieList.add(new Movie("Con Bướm Xuân", "Hồ Quang Hiếu", "http://img.saobiz.net/d/2015/07/nhung-hinh-anh-dep-cua-ca-si-Ho-Quang-Hieu.jpg", 1245, 60, 89));
mMovieList.add(new Movie("Con Bướm Xuân", "Hồ Quang Hiếu", "http://img.saobiz.net/d/2015/07/nhung-hinh-anh-dep-cua-ca-si-Ho-Quang-Hieu.jpg", 1245, 103, 34));
mMovieList.add(new Movie("Con Bướm Xuân", "Hồ Quang Hiếu", "http://img.saobiz.net/d/2015/07/nhung-hinh-anh-dep-cua-ca-si-Ho-Quang-Hieu.jpg", 1245, 1005, 90));
mMovieList.add(new Movie("Con Bướm Xuân", "Hồ Quang Hiếu", "http://img.saobiz.net/d/2015/07/nhung-hinh-anh-dep-cua-ca-si-Ho-Quang-Hieu.jpg", 1245, 106, 34));
mMovieList.add(new Movie("Con Bướm Xuân", "Hồ Quang Hiếu", "http://img.saobiz.net/d/2015/07/nhung-hinh-anh-dep-cua-ca-si-Ho-Quang-Hieu.jpg", 1245, 106, 90));
}
private void setDataListView() {
MovieAdapter movieAdapter = new MovieAdapter(this, mMovieList);
mListView.setAdapter(movieAdapter);
}
}