用ListView簡單實現滑動列表

qq_38109275發表於2019-01-22

ListView是android開發者最常用的控制元件。由於手機的螢幕幅度有限,在某些情況下無法一次性的把全部內容顯示到手機螢幕上,所以就需要用到ListView控制元件。
1、定製ListView控制元件,在很多情況下,為了開發需要,我們需要自己去定製ListView控制元件。目的是顯示更加豐富的內容。
首先新建一個XML檔案

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

注意:LinearLayout表示線性佈局,還有RelativeLayout佈局方式,GridLayout佈局方式。這裡就不作一一解釋。

<?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" >
    <ImageView 
        android:id ="@+id/post_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"  />
    <TextView
        android:id = "@+id/post_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    	android:layout_gravity="center_vertical"
    	android:layout_marginLeft="20dp" />

</LinearLayout>

註釋:
1、match_parent表示當前控制元件的大小由父佈局控制;wrap_content表示由當前控制元件內容的大小來控制控制控制元件的大小。
2、android:gravity 指定了文字的對齊方式,可選值為top、bottom、left、right和center。

public class MainActivity extends Activity {
	private List<Post> postList = new ArrayList<Post>(); 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();  //初始化
        PostAdapter adapter = new PostAdapter (MainActivity.this,
        		R.layout.post_item, postList); //新增介面卡
        ListView listView = (ListView)this.findViewById(R.id.list_view);
        listView.setAdapter(adapter);
}
//R.layout.post_item表示控制元件需要顯示的樣式,可以自己定義一個XML檔案,也可以呼叫系統的自帶的樣式,但是一般情況下建議自己定義一個樣式。

    private void init() {  //定義初始化函式
    	for(int i = 1; i < 20; i++) {
    		Post imgae1 = new Post("我的釋出", R.drawable.message2);
    		postList.add(imgae1);
    		Post imgae2 = new Post("我要釋出", R.drawable.message);
    		postList.add(imgae2);
    	}
    }
    private class Post {
    	private String name;
    	private int imageId;
    	public Post(String name, int imageId) {
    		this.name = name;
    		this.imageId = imageId;
    	}
    	public String getName() {
    		return name;
    	}
    	public int getimageId() {
    		return imageId;
    	}
    }
   private  class PostAdapter extends ArrayAdapter<Post> {
    	private int resourcedId;
    	public PostAdapter(Context context, int textViewResourceId, List<Post> objects) {
    		super(context, textViewResourceId,objects);
    		resourcedId = textViewResourceId;
    	}
    	public View getView(int position, View convertView, ViewGroup parent) {
    		Post post = getItem(position);
    		View view = LayoutInflater.from(getContext()).inflate(resourcedId, parent, false);
    		ImageView postImage = (ImageView)view.findViewById(R.id.post_image);
    		TextView postText = (TextView)view.findViewById(R.id.post_text);
    		postImage.setImageResource(post.getimageId());  //雖然定義了XML檔案,但是可以同程式碼進行插入圖片
    		postText.setText(post.getName());
    		return view;
    	}
}

ArrayAdapter的引數說明:
第一個引數:context上下文物件
第二個引數:每一個item的樣式,可以使用系統提供,也可以自定義就是一個TextView
第三個引數:資料來源,要顯示的資料
系統提供的item的樣式,可以試一試
simple_list_item1:單獨的一行文字框
simple_list_item2:有兩個文字框組成
simple_list_item_checked每項都是由一個已選中的列表項
simple_list_item_multiple_choice:都帶有一個核取方塊
simple_list_item_single_choice:都帶有一個單選框

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}
——————————————————————————————————

相關文章