Pages

Thứ Ba, 18 tháng 6, 2019

Custom Spinner

Tùy biến (Custom) lại Spinner

Nếu chúng ta muốn hiển thị hình ảnh, chuỗi dữ liệu trong đối tượng Spinner thì chúng ta phải tùy biến lại. Để tùy biến trước tiên chúng ta cần là tạo một lớp kế thừa từ lớp Adapter mặc định.

Spinner code trong XML:

  <Spinner  android:id="@+id/simpleSpinner "  android:layout_width="fill_parent"  android:layout_height="wrap_content" />

Spinner  được liên kết với AdapterView. Vì vậy, chúng ta cần phải sử dụng một trong các lớp adapter để kết nối dữ liệu cho Spinner.

Cách xây dựng lớp CustomAdapter kế thừa từ lớp BaseAdapter: 

  public class CustomAdapter extends BaseAdapter {    @Override  public int getCount() {  return 0;  }    @Override  public Object getItem(int i) {  return null;  }    @Override  public long getItemId(int i) {  return 0;  }    @Override  public View getView(int i, View view, ViewGroup viewGroup) {    return null;  }

Lớp BaseAdapter là lớp trừu tượng, vì vậy khi kế thừa từ lớp này chúng ta cần phải ghi đè (override) lại các phương thức của nó. Các phương thức này đã giải thích trong bài BaseAdapter.
Cách xây dựng lớp CustomAdapter kế thừa từ lớp ArrayAdapter:
 

  public class MyAdapter extends ArrayAdapter {    public MyAdapter(Context context, int resource, int textViewResourceId, List objects) {  super(context, resource, textViewResourceId, objects);  }    @Override  public int getCount() {  return super.getCount();  }    @Override  public View getView(int position, View convertView, ViewGroup parent) {  return super.getView(position, convertView, parent);  }  }

Đoạn code trên chúng kế thừa từ lớp ArrayAdapter và ghi đè (override) lại các phương thức của nó. Các phương thức này đã giải thích trong bài ArrayAdapter.


Ví dụ: Trong ví dụ này chúng ta sẽ làm ứng dụng gồm có một Spinner để hiển thị tên các nước cùng với lá cờ nước đóTiến hành tạo project, vào thư mục  res /layout -> activity_main.xml thiết kế giao diện sau:

Bước 1: Tạo một project tên là ListViewBaseAdapterFile->New->Android Application Project điền các thông tin ->Next ->Finish

Bước 2: Mở res -> layout -> xml (hoặc) activity_main.xml và thêm code trong  Relative Layout.

  <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="hiepsiit.com.customspinner.MainActivity" >        <Spinner          android:id="@+id/simpleSpinner"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_centerHorizontal="true"          android:layout_marginTop="50dp" />    </RelativeLayout>  

Bước 3: Tạo mới một Layout custom_spinner_items.xml vào trong thư mục layout và thêm vào 2 widget ImageViewTextView sẽ được  trong Spinner.

  <?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">        <ImageView          android:id="@+id/imageView"          android:layout_width="50dp"          android:layout_height="50dp"          android:padding="5dp"          android:src="@drawable/ic_launcher" /><!--Make sure image is present in Drawable folder-->        <TextView          android:id="@+id/textView"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:layout_gravity="center"          android:padding="@dimen/activity_horizontal_margin"          android:text="Demo"          android:textColor="#000" />  </LinearLayout>

Bước 4: Tạo mới một lớp CustomAdapter.java bên trong package và thêm code sau:

  package hiepsiit.com.customspinner;    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;    public class CustomAdapter extends BaseAdapter{  	 Context context;  	 int flags[];  	 String[] countryNames;  	 LayoutInflater inflter;        public CustomAdapter(Context applicationContext, int[] flags, String[] countryNames) {          this.context = applicationContext;          this.flags = flags;          this.countryNames = countryNames;          inflter = (LayoutInflater.from(applicationContext));      }        @Override      public int getCount() {          return flags.length;      }        @Override      public Object getItem(int i) {          return null;      }        @Override      public long getItemId(int i) {          return 0;      }        @Override      public View getView(int i, View view, ViewGroup viewGroup) {          view = inflter.inflate(R.layout.custom_spinner_items, null);          ImageView icon = (ImageView) view.findViewById(R.id.imageView);          TextView names = (TextView) view.findViewById(R.id.textView);          icon.setImageResource(flags[i]);          names.setText(countryNames[i]);          return view;      }  }  

Bước 5: Mở src -> package -> MainActivity.java
Trong bước này chúng ta khởi tạo Spinner.  Tiếp theo, chúng ta tạo 2 mảng, 1 mảng cho image, 1 mảng cho tên image. Lưu các hình ảnh vào thư mục drawable.

  package hiepsiit.com.customspinner;    import android.app.Activity;  import android.os.Bundle;  import android.view.Menu;  import android.view.MenuItem;  import android.view.View;  import android.widget.AdapterView;  import android.widget.AdapterView.OnItemSelectedListener;  import android.widget.Spinner;  import android.widget.Toast;    public class MainActivity extends Activity implements OnItemSelectedListener{  	 String[] countryNames={"India","China","Australia","Portugle","America","New Zealand"};  	 int flags[] = {R.drawable.india, R.drawable.china, R.drawable.australia, R.drawable.portugle, R.drawable.america, R.drawable.new_zealand};    	@Override  	protected void onCreate(Bundle savedInstanceState) {  		super.onCreate(savedInstanceState);  		setContentView(R.layout.activity_main);  		//Getting the instance of Spinner and applying OnItemSelectedListener on it          Spinner spin = (Spinner) findViewById(R.id.simpleSpinner);          spin.setOnItemSelectedListener(this);            CustomAdapter customAdapter=new CustomAdapter(getApplicationContext(),flags,countryNames);          spin.setAdapter(customAdapter);  	}    	    	@Override  	public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,  			long arg3) {  		// TODO Auto-generated method stub  		Toast.makeText(getApplicationContext(), countryNames[arg2], Toast.LENGTH_LONG).show();  		  	}    	@Override  	public void onNothingSelected(AdapterView<?> arg0) {  		// TODO Auto-generated method stub  		  	}  	  }  

Download ví dụ

Ứng dụng này được phát triển bởi adt bundleandroid 4.2 sử dụng minimum sdk 11  and target sdk 21.


Kết quả khi chạy ứng dụng 

Chọn một dòng trên ListView:



Cập nhật công nghệ từ Youtube tại link: https://www.youtube.com/channel/UCOxeYcvZPGf-mGLYSl_1LuA/videos
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com