列表的设计

计应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

这里使用的代码较多,这里使用了三个不同的类,他们之间是继承的关系;当用户点击进入一个文件夹后,再点击向上按钮,程序会自动进入上一级界面。

 

小结:要想成为一个优秀的编程人员,不仅仅要有超强的逻辑思维能力和代码编写能力,最重要的是要能清楚的叙述程序所要表达意思;沟通能力是每一个优秀程序员应该具备的素质。老师上课经常告诫我们,不要只想着编代码。我们要能叙述一个程序的做法,不一定是代码。现在是信息时代。写代码已经不再是难得问题,只要我们在百度、贴吧、博客里面一搜索基本上就可以找到我们想要的答案。老师说:情感问题在百度是不是万能,但是程序问题在百度上就是万能的;但是我们的具备把一个问题叙述清楚的能力。虽然做了这么多小程序自己写代码的时候几乎没有,都只是用别人的代码进行修改;但是还是从其中学到了很多。而且还锻炼了自己的动手能力。

 

 

posted on 2013-05-12 17:23  嗯是不得撇  阅读(139)  评论(0编辑  收藏  举报

导航