Cách kiếm tiền đơn giản, hiệu quả nhất

Thứ Bảy, 27 tháng 6, 2015

[android]Tùy biến ListView-Làm việc với ListView|custom ListView


Thông thường ở chế độ mặc định các item (hay các dòng) trong ListView chỉ hiển thị các dòng text. Để tùy biến các item của ListView trông đẹp hơn, lập trình viên có thể thêm các biểu tượng (icon), checkbox hoặc bất cứ cái gì vào item. Đơn giản chỉ là cung cấp dữ liệu cho adapter để tạo ra tập các đối tượng hiển thị (view objects) cho mỗi item.

Trong ví dụ bên dưới đây, chúng ta sẽ thêm biểu tượng vào item của ListView. Trước hết tạo một project có tên DemoCustomListView. Chỉnh sửa file layout xml của project có tên activity_main.xml như bên dưới:

<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="com.example.democustomlistview.MainActivity" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >
    </ListView>
</RelativeLayout>

Trong file xml trên ta khai báo ListView để hiển thị danh sách các item cho người dùng chọn.
Tiếp theo tạo một file layout xml có tên custom_listview.xml dành để việc thể hiện custom giao diện cho item của ListView nằm trong thư mục res/layout/ có nội dung như sau:
<?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" >
    <TextView
        android:id="@+id/textView1"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:background="@drawable/bg_tv_nguphap"
        android:gravity="center"
        android:text="TextView" />
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentTop="true"
        android:layout_margin="5dp"
        android:layout_toRightOf="@+id/textView1"
        android:background="@drawable/hotboy" />
    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_toRightOf="@+id/imageView1"
        android:gravity="left|center"
        android:text="TextView"
        android:textSize="30dp"
        android:textStyle="bold" />
</RelativeLayout>


Bây giờ chúng ta chuyển sang xử lý code:
Tạo một class Item.java để Get Set cho từng thành phần trong item.

package com.example.democustomlistview;

public class Item {
      int icon;
      String id;
      String title;

      public int getIcon() {
            return icon;
      }

      public void setIcon(int icon) {
            this.icon = icon;
      }

      public String getId() {
            return id;
      }

      public void setId(String id) {
            this.id = id;
      }

      public String getTitle() {
            return title;
      }

      public void setTitle(String title) {
            this.title = title;
      }
}
Tiếp theo ta tạo một class Adapter.java:

package com.example.democustomlistview;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class Adapter extends ArrayAdapter<Item> {
      Activity context;
      int id;
      ArrayList<Item> items;

      public Adapter(Activity context, int resource, ArrayList<Item> objects) {
            super(context, resource, objects);
            // TODO Auto-generated constructor stub
            this.context = context;
            this.id = resource;
            this.items = objects;
      }

      @Override
      public View getView(int position, View v, ViewGroup parent) {
            // TODO Auto-generated method stub
            if (v == null) {
                  LayoutInflater inflater = context.getLayoutInflater();
                  v = inflater.inflate(id, null);
            }
            TextView tvId = (TextView) v.findViewById(R.id.textView1);
            TextView tvTitle = (TextView) v.findViewById(R.id.textView2);
            ImageView imgIcon = (ImageView) v.findViewById(R.id.imageView1);

            Item item = items.get(position);

            tvId.setText(item.getId());
            tvTitle.setText(item.getTitle());
            imgIcon.setBackgroundResource(item.getIcon());
            return v;
      }

}
 Cuối cùng ta xử lý code trong MainActivity.java
Trước tiên ta cần import các file ảnh vào thư mục drawable


xử lý code:
package com.example.democustomlistview;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;

public class MainActivity extends Activity {

      private ListView listview;
      private ArrayList<Item> listitem = new ArrayList<Item>();
      int[] icon = { R.drawable.hotgirl, R.drawable.hotboy, R.drawable.hoahau,
                  R.drawable.casy };
      String[] str = { "HotGirl", "HotBoy", "Hoa Hậu", "Ca sỹ" };

      @Override
      protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listview = (ListView) findViewById(R.id.listView1);
            for (int i = 0; i < str.length; i++) {
                  Item item = new Item();
                  item.setId("" + (i + 1));
                  item.setIcon(icon[i]);
                  item.setTitle(str[i]);
                  listitem.add(item);
            }
            Adapter adapter = new Adapter(this, R.layout.custom_listview, listitem);
            adapter.notifyDataSetChanged();
            listview.setAdapter(adapter);
      }
}

Hoàn tất,bây giờ bạn mở máy ảo lên và chạy để xem kết quả.
Đây chỉ là tut hướng dẫn cơ bản để bạn làm quen và hiểu được cách để custom một item trong ListView theo ý của mình. Với công việc sau này hầu như tất cả các item trong listview đều được custom lên nhằm làm cho giao diện của bạn hiển thị trở lên sinh động và tối ưu hơn.
Trong bài sau mình sẽ chia sẻ các bạn cách để hiển thị dữ liệu lên listview bằng cách get dữ liệu từ database sqlite.
download full code demo: http://www.mediafire.com/download/kwo877ecd5gxxy1/DemoCustomListView.rar
Cảm ơn bạn đã đọc bài viết !
Các bạn góp ý để mình rút kinh nghiệm và xây dựng bài tốt hơn. thân!
Xem video hướng dẫn tại đây:

0 nhận xét:

Đăng nhận xét