Home
2018年4月19日 星期四

[程式] Android Studio : ListView Using BaseAdapter

Android Studio : ListView Using BaseAdapter(使用BaseAdapter的ListView範例)

ListView是'很常用的功能,E-Mail信件、選單等都是利用此功能,使用最基本的BaseAdapter做一個簡單的範例。


相關資訊圖片:

ListView Using BaseAdapter View1 (activity_main.xml)畫面
ListView Using BaseAdapter View1 (activity_main.xml)畫面


ListView Using BaseAdapter View2 (list_item.xml)畫面
ListView Using BaseAdapter View2 (list_item.xml)畫面


初始畫面
初始畫面


點擊畫面
點擊畫面


Source Code:

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

list_item.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">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textSize="24dp"
        android:text="TextView" />

</LinearLayout>

MainActivity.java
package tw.idv.wenyen.listviewusingbaseadapter;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    ListView listView;

    static String[] lessons = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = findViewById(R.id.listView);
        listView.setAdapter(new BaseAdapter() {
            @Override
            public int getCount() {
                return lessons.length;
            }

            @Override
            public Object getItem(int position) {
                return lessons[position];
            }

            @Override
            public long getItemId(int position) {
                return position;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
                View view = layoutInflater.inflate(R.layout.list_item, null);
                TextView textView = view.findViewById(R.id.textView);
                textView.setText(lessons[position]);
                return view;
            }

        });

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
//                Toast.makeText(MainActivity.this, lessons[position], Toast.LENGTH_SHORT).show();
                Toast.makeText(MainActivity.this, listView.getAdapter().getItem(position).toString(), Toast.LENGTH_SHORT).show();
            }
        });
    }
}

實作心得:

使用BaseAdapter主要是因為比需實作的函數只有4個,了解最基礎的函數後,再慢慢往上增加相關的函數,會是比較好的方式,尤其是將來要客製化時,才能夠靈活的應用,就像在範例的Toast,可以直接取得點選位置,也可以呼叫Adapter的函數,呈現出相同效果。

參考資料:

0 意見:

張貼留言