计应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
这里使用的代码较多,这里使用了三个不同的类,他们之间是继承的关系;当用户点击进入一个文件夹后,再点击向上按钮,程序会自动进入上一级界面。
小结:想要成为一个优秀的编程人员,一定要有跳跃的逻辑思维能力,而且要让人知道所写的程序想表达的意思,最重要的还是这件程序对客户的需求是不是满意,程序员要有较好的沟通能力,要不不知道客户表达的东西。做为一名编程人员有时候也应该要耐得住寂寞,想要成功就要有一颗不怕挫折的心,这是一个漫长的学习过程,在路上难免遇到解决不了的难题。当遇到解决不了难题的时候那就要不停的思考怎样解决这个问题,不要想着这条路是不是适合自己,想要放弃。虽然现在还只是入门,经常参照着别人的代码修改,但是从其中还是学到了很多知识。