常用屬性設置
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沒有線條啊!如果遇到了那麼就是以下這兩種情況了:
通過加斷點調試發現在listView中,所有的分割線都是通過畫一個很窄的矩形來實現的,但是在畫分割線前都會都會判斷目前的位置A和listView的長度B,如果A=B了,那麼就不會畫這條分割線了。但是將Listview嵌入到一個View中,一般會設置爲高度爲wrap_content,這種情況下,最後那條分割線的位置剛好等於listView的高度,所以系統不會畫上這條分割線。那要怎麼樣纔會畫上呢?很簡單,將ListView的高度設置爲fill_partent就可以了。 當然以上所說的都是item很少的情況下,如果item很多以至於必須顯示滾動條的話,那最後一個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的應用,敬請關注後面的文章。同時,歡迎大家和我一起學習討論,一起提高!