ListView基礎應用

常用屬性設置

   
android:divider       item列表條目之間顯示的drawable或color
android:dividerHeight    設置item之間線條的寬度
android:scrollbars="none"   設置滾動條,  horizontal|vertical|none分別爲水平|豎直|不顯示滾動條 
android:entries     數組資源的引用。比如說在res的資源文件中定義數組,在此處直接引用
android:headerDividersEnabled  當設爲false時,ListView將不會在各個header之間繪製divider.默認爲true,主要應用在ListView.addHeaderView()上面。 
android:FooterDividersEnabled  當設爲false時,ListView將不會在各個footer之間繪製divider.默認爲true,主要應用在ListView.addFooterView()上面。

最後一條item線條不顯示問題

大家在使用ListView的時候,一定會遇到這樣一個問題,怎麼ListView的最後一個item沒有線條啊!如果遇到了那麼就是以下這兩種情況了:
(1)ListView的 layout_height="warp_content" 改成 fill_parent(match_parent)即可顯示了
(2)ListView的layout_height是fill_parent,但是數據的長度超出了屏幕長度,這就沒辦法了。
我從網上看到了這樣的解釋:
     通過加斷點調試發現在listView中,所有的分割線都是通過畫一個很窄的矩形來實現的,但是在畫分割線前都會都會判斷目前的位置A和listView的長度B,如果A=B了,那麼就不會畫這條分割線了。但是將Listview嵌入到一個View中,一般會設置爲高度爲wrap_content,這種情況下,最後那條分割線的位置剛好等於listView的高度,所以系統不會畫上這條分割線。那要怎麼樣纔會畫上呢?很簡單,將ListView的高度設置爲fill_partent就可以了。 當然以上所說的都是item很少的情況下,如果item很多以至於必須顯示滾動條的話,那最後一個item下面是肯定不會有分割線了。

ListView局部添加或刷新單個Item

(1)通過 Adapter.notifyDataSetChanged()去重新繪製ListView
public class MainActivity extends Activity {
	private ListView listView;
	private String[] stringArray = new String[] { "語文", "數學", "英語", "物理", "化學" };
	private List<string> list = new ArrayList<string>();
	private BaseAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		for (int i = 0; i < stringArray.length; i++) {
			list.add(stringArray[i]);
		}
		listView = (ListView) this.findViewById(R.id.listView);
		adapter = new ArrayAdapter<string>(this, R.layout.item, list);
		listView.setAdapter(adapter);
		listView.setOnItemClickListener(new OnItemClickListener() {

			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				list.add("xiaotang");
				adapter.notifyDataSetChanged();
			}
		});
	}
}
</string></string></string>
通過單擊ListView的Item,就會添加一項item.不過需要值得說明這種添加也還是會重新繪製ListView,即重新加載數據。但是它和重新setAdapter()還是有區別的:
ListView.setAdapter()加載完數據會定位到第一項數據,而adapter.notifyDatasetChanged()則還是原來的焦點.
(2)listView獲取指定位置View修改
public class MainActivity extends Activity {
	private ListView listView;
	private String[] stringArray = new String[] { "語文", "數學", "英語", "物理", "化學" };
	private List<string> list = new ArrayList<string>();
	private BaseAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		for (int i = 0; i < stringArray.length; i++) {
			list.add(stringArray[i]);
		}
		listView = (ListView) this.findViewById(R.id.listView);
		adapter = new ArrayAdapter<string>(this, R.layout.item, list);
		listView.setAdapter(adapter);
		listView.setOnItemClickListener(new OnItemClickListener() {

			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				View v = listView.getChildAt(position
						- listView.getFirstVisiblePosition());
				if (v instanceof TextView) {
					TextView tv = (TextView) v;
					tv.setText("xiaotang");
				}
			}
		});
	}
</string></string></string>
通過ListView.getChildAt()獲取指定位置的View,然後修改其內容,ListView就能被修改了。

ListView整合其他View實現整體滑動:

關鍵代碼如下:
	private void addHeadView() {
		// 獲取屏幕寬度,高度
		Display display = this.getWindowManager().getDefaultDisplay();
		int width = display.getWidth();
		int height = display.getHeight();
		LinearLayout headView = (LinearLayout) View.inflate(this, R.layout.nav,
				null);
		AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
				new LayoutParams(AbsListView.LayoutParams.MATCH_PARENT,
						(int) (height * 0.12)));
		headView.setLayoutParams(lp);
		listView.addHeaderView(headView);
	}

	private void initData() {
		BaseAdapter adapter = new ArrayAdapter<string>(this, R.layout.item,
				stringArray);
		listView.setAdapter(adapter);
	}
</string>
通過ListView的addHeaderView()將headView添加到了ListView中了。
     好了,ListView的基礎應用就講到這兒了。想要了解更多的ListView的應用,敬請關注後面的文章。同時,歡迎大家和我一起學習討論,一起提高!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章