Membuat Menu Vertikal Menggunakan ListView di Android

Membuat Menu dengan ListView di Android

Tutorial berikut akan menjelaskan bagaimana membuat menu vertikal menggunakan widget ListView pada Android Studio.

Secara singkat, penjelasan widget ListView adalah tampilan beberapa item dalam bentuk list atau daftar yang dapat di scroll secara vertikal. Ibarat daftar buku tamu, yang memiliki beberapa item tamu dalam daftarnya.

Untuk menampilkan daftar ke dalam ListView, kita memerlukan ArrayAdapter sebagai wadah yang akan digunakan oleh ListView dalam prosesnya. Di akhir tutorial, nanti bisa download full source codenya

Dalam prakteknya, tutorial ini akan menggunakan custom layout listview sebagai akibat dari judul diatas (halah pakai sebab akibat segala). Oke lanjut, kira-kira gambaran layout yang akan kita buat kurang lebih seperti ini :

Membuat List Menu ListView di Android

[ads id="ads1"]

Membuat Layout ListView

Langkah pertama adalah membuat layout ListView terlebih dahulu, layout ini berfungsi sebagai pengganti layout standar yang biasa digunakan pada ListView. kode berikut adalah contoh layout yang akan digunakan.

Simpan dengan nama list_menu.xml.

Hasilnya seperti berikut :
Membuat Menu Vertikal menggunakan ListView di Android Studio

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:orientation="vertical"
    android:padding="6dip" >

    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="10dp"
        android:layout_marginLeft="10dp"
        android:src="@drawable/receipt" />

    <TextView
        android:id="@+id/firstLine"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/secondLine"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_alignWithParentIfMissing="true"
        android:layout_toRightOf="@id/icon"
        android:singleLine="true"
        android:gravity="center_vertical"
        android:textColor="@color/primaryActive"
        android:text="First Line"
        android:textSize="16sp" />

    <TextView
        android:id="@+id/secondLine"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@id/icon"
        android:text="Second Line"
        android:textSize="12sp" />
</RelativeLayout>


Membuat Object MenuModel

Object MenuModel digunakan sebagai Class/Model dari menu yang akan dibuat nantinya. MenuModel terdiri dari object ImageView, dan object TextView seperti pada file list_menu.xml diatas.

Untuk membuat MenuModel, buatlah sebuah Class dengan nama MenuModel.java. Kode selengkapnya seperti berikut :
public class MenuModel {
    String Title ;
    String Description;
    int Icon;

    public MenuModel(String Title, String Description, int Icon){
        this.Title = Title;
        this.Description = Description;
        this.Icon = Icon;
    }

    public MenuModel(String Title){
        this.Title = Title;
    }

    public String getTitle(){
        return this.Title;
    }

    public String getDescription(){ return this.Description;  }

    public int getIcon(){
        return this.Icon;
    }
}

Membuat MenuAdapter

MenuAdapter berfungsi sebagai adapter yang digunakan oleh ListView. MenuAdapter akan diset secara langsung untuk menggunakan layout list_menu.xml diatas yang sudah dibuat. Sehingga tampilan ListView tidak akan lagi sama dengan tampilan standard/default Android Studio.

Untuk membuat MenuAdapter, buatlah sebuah Class dengan nama MenuAdapter.java. Class ini mewarisi sifat dari ArrayAdapter yang umumnya digunakan oleh ListView pada Android Studio.
public class MenuAdapter extends ArrayAdapter<MenuModel> implements View.OnClickListener{

    private ArrayList<MenuModel> dataSet;
    private Context mContext;

    public static class ViewHolder {
        public TextView txtTitle;
        public TextView txtDescription;
        public ImageView imgIcon;
    }

    public MenuAdapter(ArrayList<MenuModel> data, Context context) {
        super(context, -1, data);
        this.dataSet = data;
        this.mContext=context;

    }

    @Override
    public void onClick(View v) {
        int position=(Integer) v.getTag();
        final Object object= getItem(position);
        final MenuModel dataModel=(MenuModel)object;
    }

    @Override
    public int getViewTypeCount() {
        return super.getCount();
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

    private int lastPosition = -1;

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final MenuModel dataModel = getItem(position);
        final ViewHolder viewHolder;
        final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        final View result;
        String desc = dataModel.getDescription();

        if (convertView == null) {
            viewHolder = new ViewHolder();
            convertView = inflater.inflate(R.layout.list_menu, parent, false);
            viewHolder.txtTitle = (TextView) convertView.findViewById(R.id.firstLine);
            viewHolder.txtDescription = (TextView) convertView.findViewById(R.id.secondLine);
            viewHolder.imgIcon = (ImageView) convertView.findViewById(R.id.icon);
            result = convertView;
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
            result=convertView;
        }

        lastPosition = position;
        viewHolder.txtTitle.setText(dataModel.getTitle());
        viewHolder.txtDescription.setText(dataModel.getDescription());
        viewHolder.imgIcon.setImageResource(dataModel.getIcon());
        viewHolder.imgIcon.setOnClickListener(this);
        viewHolder.imgIcon.setTag(position);

        return convertView;
    }
}

[ads id="ads2"]

Menambahkan List Menu pada Layout

Langkah selanjutnya adalah mengimplementasikan Class dan Model yang sudah kita buat diatas kedalam layout yang kita inginkan. Caranya?
Tambahkan object ListView kedalam layout lalu berikan id dengan nama listViewMenu misalnya.

Lalu pada MainActivity.java atau Activity lain (dimana kita menambahkan object ListView), buatlah data ArrayList sebagai list item yang akan digunakan pada ListView. Lalu set kedalam MenuAdapter.
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        final ListView listViewmenu = (ListView) findViewById(R.id.listViewMenu);

        final ArrayList<MenuModel> listMenu = new ArrayList<>();
        listMenu.add(new MenuModel("Menu 1", "Description menu 1", R.drawable.minus_circle));
        listMenu.add(new MenuModel("Menu 2", "Description menu 2", R.drawable.notification));
        listMenu.add(new MenuModel("Menu 3", "Description menu 3", R.drawable.receive));
        listMenu.add(new MenuModel("Menu 4", "Description menu 4", R.drawable.return_truck));
        listMenu.add(new MenuModel("Menu 5", "Description menu 5", R.drawable.luggage_cart));
        listMenu.add(new MenuModel("Menu 6", "Description menu 6", R.drawable.dispatch));
        listMenu.add(new MenuModel("Menu 7", "Description menu 7",R.drawable.pallet));
        listMenu.add(new MenuModel("Menu 8", "Description menu 8", R.drawable.stock));
        listMenu.add(new MenuModel("Menu 9", "Description menu 9", R.drawable.minus_circle));
        listMenu.add(new MenuModel("Menu 10", "Description menu 10", R.drawable.notification));
        listMenu.add(new MenuModel("Menu 11", "Description menu 11", R.drawable.receive));
        listMenu.add(new MenuModel("Menu 12", "Description menu 12", R.drawable.return_truck));
        listMenu.add(new MenuModel("Menu 13", "Description menu 13", R.drawable.luggage_cart));
        listMenu.add(new MenuModel("Menu 14", "Description menu 14", R.drawable.dispatch));
        listMenu.add(new MenuModel("Menu 15", "Description menu 15",R.drawable.pallet));
        listMenu.add(new MenuModel("Menu 16", "Description menu 16", R.drawable.stock));

        final MenuAdapter menuAdapter = new MenuAdapter(listMenu, this);
        listViewmenu.setAdapter(menuAdapter);
        listViewmenu.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                MenuModel dataModel= listMenu.get(position);
                Snackbar.make(view, dataModel.getTitle()+ "\n" +dataModel.getDescription(), Snackbar.LENGTH_SHORT)
                        .setAction("No action", null).show();
            }
        });
    }

List Menu ListView Android

Source code : Membuat Menu Menggunakan ListView di Android

Selesai. Untuk pertanyaan silahkan tinggalkan komentar ya.



Update

Untuk menjaga style dari widget ListView dan teks TextView yang selalu berubah-ubah ketika user melakukan scrolling, maka perlu ditambahkan return nilai dari method getViewTypeCount() dan getItemViewType().

Kode selengkapnya seperti dibawah ini :
@Override
    public int getViewTypeCount() {
        return super.getCount();
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

0/Post a Comment/Comments

Lebih baru Lebih lama