计应111 章锦超
我们经常会在手机程序中看到列表,方便我们将一类的文件或是同一类型的的资料有的列出来,相当于一个简单地资源管理器,能更快地查找。
下面是一个设计列表的程序,将Layout转换成View,通过LayoutInflater完成
使用Layout的原因:Layout便于在可视化界面中设计。
其中代码如下:
1.
public class FileListViewActivity extends Activity implements OnItemClickListener, OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getObjFromID();
FileListAdapter da=new FileListAdapter(this);
lv.setAdapter(da);
lv.setOnItemClickListener(this);
da.scanFiles("/");
btnUp.setOnClickListener(this);
}
ListView lv;
TextView t1;
Button btnUp;
void getObjFromID()
{
t1=(TextView) findViewById(R.id.t1);
lv=(ListView) findViewById(R.id.listView1);
btnUp=(Button) findViewById(R.id.btnUp);
}
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position,long id) {
FileListAdapter da= (FileListAdapter) lv.getAdapter();
File f= da.list.get(position);
if(f.isDirectory())
{
t1.setText(f.getPath());
da.scanFiles(f.getPath());
}
}
@Override
public void onClick(View v) {
FileListAdapter da= (FileListAdapter) lv.getAdapter();
if(da.currPath.equals("/")) return;
File f=new File(da.currPath);
t1.setText(f.getParent());
da.scanFiles(f.getParent());
}
}
2.
public class FileListAdapter extends BaseAdapter {
public Activity activity; //创建View时必须要提供Context
public List<File> list=new LinkedList<File>(); //数据源
public String currPath;
public FileListAdapter(Activity activity) {
this.activity = activity;
}
public void scanFiles(String path)
{
list.clear();
File dir=new File(path);
File[] subFiles=dir.listFiles();
if(subFiles!=null)
for(File f:subFiles)
list.add(f);
this.notifyDataSetChanged();
currPath=path;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v=View.inflate(activity, R.layout.item, null);
TextView txtName= (TextView) v.findViewById(R.id.txtName);
ImageView imgIcon=(ImageView) v.findViewById(R.id.imgIcon);
File f=list.get(position);
txtName.setText(f.getName());
Bitmap bmp_folder=BitmapFactory.decodeResource(
activity.getResources(),R.drawable.folder);
Bitmap bmp_file=BitmapFactory.decodeResource(
activity.getResources(),R.drawable.file);
if(f.isDirectory())
imgIcon.setImageBitmap(bmp_folder);
else
imgIcon.setImageBitmap(bmp_file);
return v;
}
}
3.
public class FileBean implements Comparator<Object>{
private File file; // 文件
private Bitmap icon;// 文件图标
private String name;// 文件名
private String path;// 文件路径
private String size;// 文件大小
private String type;// 文件类型
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public Bitmap getIcon() {
return icon;
}
public void setIcon(Bitmap icon) {
this.icon = icon;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getFileSize() {
return size;
}
public void setFileSize(String fileSize) {
this.size = fileSize;
}
public String getFileStyle() {
return type;
}
public void setFileStyle(String style) {
this.type = style;
}
@Override
public int compare(Object object1, Object object2) {
FileBean file1 = (FileBean)object1;
FileBean file2 = (FileBean)object2;
return file1.getName().compareToIgnoreCase(file2.getName());
}
}
运行效果如下:
图1
这里使用的代码较多,这里使用了三个不同的类,他们之间是继承的关系;当用户点击进入一个文件夹后,再点击向上按钮,程序会自动进入上一级界面。
小结:想要成为一个优秀的编程人员,一定要有跳跃的逻辑思维能力,而且要让人知道所写的程序想表达的意思,最重要的还是这件程序对客户的需求是不是满意,程序员要有较好的沟通能力,要不不知道客户表达的东西。做为一名编程人员有时候也应该要耐得住寂寞,想要成功就要有一颗不怕挫折的心,这是一个漫长的学习过程,在路上难免遇到解决不了的难题。当遇到解决不了难题的时候那就要不停的思考怎样解决这个问题,不要想着这条路是不是适合自己,想要放弃。虽然现在还只是入门,经常参照着别人的代码修改,但是从其中还是学到了很多知识。