Android中ListView的總結(1)

這ListView真是麻煩,一個小小的FileBrowser廢了將近2天。看來自己的功力還需要加強。

做FileBrowser中遇到幾個ListView問題總結一下。

1、自定義樣式

  ListView其實和Asp.net裏面的Repeater有點像,但是不同的是項的內容可以用一個layout文件來套用,這個比較有意思,畢竟剛開始研究android姑且叫它自定義樣式吧,正好我考慮着後期給FileBrowser寫個換膚的功能,有這個東西就比較easy了。

首先需要這樣的layout文件:

res/layout/imagelist.xml

<?xml version="1.0" encoding="UTF-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  android:id="@+id/RelativeLayout01" android:layout_width="fill_parent"  
  android:layout_height="wrap_content" android:paddingBottom="4dip"  
  android:paddingLeft="12dip" android:paddingRight="12dip">
     <ImageView android:paddingTop="12dip" android:layout_width="50dip"  
    android:layout_height="50dip" android:id="@+id/img" android:layout_alignParentLeft="true" />  
   <TextView android:text="TextView01" android:layout_height="wrap_content"
    android:textSize="20dip" android:layout_width="fill_parent"
    layout_centerVertical="true" android:layout_centerInParent="true"
    android:paddingLeft="50dip" android:gravity="clip_vertical"
  android:id="@+id/file" />
<CheckBox android:id="@+id/cbSelect" android:layout_width="wrap_content"
     android:focusable="false" <!-- 這個沒有的話會讓ListView的內容無沒點擊,
因爲CheckBox獲得焦點的優先級比ListView要高,不明白爲什麼要這樣設計,
事實是並沒有點到CheckBox它也會把下面的ListView的項完全擋住-->
  android:layout_height="wrap_content" android:layout_alignParentRight="true"
  android:layout_centerVertical="true"></CheckBox>
</RelativeLayout>

然後在onCreate中用下面的方法即可將layout裏套用的東西顯示出來

ListView lv = (ListView) findViewById(R.id.lvFile);
LinearLayout llFile
= (LinearLayout) findViewById(R.id.llfiles);
SimpleAdapter listAdapter
= new SimpleAdapter(this, GetFiles(),
R.layout.imagelist,
new String[] { "img", "file" }, new int[] {
R.id.img, R.id.file });
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
lv.setAdapter(listAdapter);

GetFile方法:

public List<Map<String, Object>> GetFiles() {
File file
= new File(currentPath);
File[] fileList
= file.listFiles();
files.clear();
Map
<String, Object> mapBack = new HashMap<String, Object>();
mapBack.put(
"img", R.drawable.folder);
mapBack.put(
"file", "..");
mapBack.put(
"checked", false);
Arrays.sort(fileList, ComparorFactory.CreateComparator(
"FileName"));
files.add(mapBack);
for (File f : fileList) {
Map
<String, Object> map = new HashMap<String, Object>();
if (!f.canRead())
continue;
map.put(
"img", IconFactory.getIcon(f));
map.put(
"file", f.getName());
files.add(map);
}
return files;
}
2011032309523120.jpg

現在能看到這樣的界面,但是文件夾不能向上,怎麼辦,

private View getHeaderView() {
LayoutInflater rl
= getLayoutInflater();
View row
= rl.inflate(R.layout.imagelist, null, false);
CheckBox cb
= (CheckBox) row.findViewById(R.id.cbSelect);
cb.setVisibility(CheckBox.INVISIBLE);
ImageView img
= (ImageView) row.findViewById(R.id.img);
img.setImageResource(R.drawable.folder);
TextView txt
= (TextView) row.findViewById(R.id.file);
txt.setText(
"..");
return row;
}

lv.setAdapter(listAdapter); 之前調用lv.addHeaderView(getHeaderView());就可以加上去了。
發佈了57 篇原創文章 · 獲贊 33 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章