android将图标放入列表(文件浏览器)

android将图标放入列表(文件浏览器),android,Android,嗨,我正在android中制作一个文件浏览器,下面是代码: public class FileBrowser extends ListActivity { private IAppManager imService; private File currentDir; private FileArrayAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) {

嗨,我正在android中制作一个文件浏览器,下面是代码:

public class FileBrowser extends ListActivity {
    private IAppManager imService;

    private File currentDir;
    private FileArrayAdapter adapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Editable usrr = Login.usernameText.getText();
        currentDir = new File("/sdcard/");
        fill(currentDir);

    }
    private void fill(File f)
    {
        File[]dirs = f.listFiles();
         this.setTitle(f.getName()+ "'s Chats" );
         List<Option>dir = new ArrayList<Option>();
         List<Option>fls = new ArrayList<Option>();
         try{
             for(File ff: dirs)
             {
                if(ff.isDirectory())
                    dir.add(new Option(ff.getName(),"Folder",ff.getAbsolutePath()));
                else
                {
                    fls.add(new Option(ff.getName(),"File Size: "+ff.length(),ff.getAbsolutePath()));
                }
             }
         }catch(Exception e)
         {

         }
         Collections.sort(dir);
         Collections.sort(fls);
         dir.addAll(fls);
        if(!f.getName().equalsIgnoreCase("sdcard"))
             dir.add(0,new Option("..","Parent Directory",f.getParent()));
         adapter = new FileArrayAdapter(FileBrowser.this,R.layout.filebrowser,dir);

         this.setListAdapter(adapter);

    }
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        Option o = adapter.getItem(position);
        if(o.getData().equalsIgnoreCase("folder")||o.getData().equalsIgnoreCase("parent directory")){
            //v.setBackgroundResource(R.drawable.foler);
                  currentDir = new File(o.getPath());
                fill(currentDir);
        }
        else
        {

            onFileClick(o);

        }
    }
公共类文件浏览器扩展ListActivity{
私人IAppManager imService;
私有文件currentDir;
专用文件阵列适配器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
可编辑的usrr=Login.usernameText.getText();
currentDir=新文件(“/sdcard/”);
填充(currentDir);
}
专用空白填充(文件f)
{
File[]dirs=f.listFiles();
this.setTitle(f.getName()+“'s Chats”);
Listdir=newarraylist();
Listfls=newarraylist();
试一试{
用于(文件ff:dirs)
{
if(ff.isDirectory())
添加目录(新选项(ff.getName(),“Folder”,ff.getAbsolutePath());
其他的
{
添加(新选项(ff.getName(),“文件大小:”+ff.length(),ff.getAbsolutePath());
}
}
}捕获(例外e)
{
}
集合排序(dir);
集合。排序(fls);
addAll主任(fls);
如果(!f.getName().equalsIgnoreCase(“SD卡”))
dir.add(0,新选项(“…”,“父目录”,f.getParent());
adapter=newfilearrayadapter(FileBrowser.this,R.layout.FileBrowser,dir);
这个.setListAdapter(适配器);
}
@凌驾
受保护的void onListItemClick(列表视图l、视图v、整数位置、长id){
//TODO自动生成的方法存根
super.onListItemClick(左、右、位置、id);
选项o=适配器.getItem(位置);
如果(o.getData().equalsIgnoreCase(“文件夹”)| | o.getData().equalsIgnoreCase(“父目录”)){
//v、 挫折资源(R.drawable.foler);
currentDir=新文件(o.getPath());
填充(currentDir);
}
其他的
{
onFileClick(o);
}
}
现在我想要的是为文件和文件夹显示一个图标。(没有其他图标,只有这2个)我在xml布局中放置了一个图像视图,但我不知道如何动态检查哪个列表项是文件,以便它在旁边显示一个文件图标,哪个是文件夹以显示文件夹图标。
请帮助!

您必须自定义FileArrayAdapter

@Override
public View getView(int position, View convertView, ViewGroup parent) {
     View v = convertView;

     if (v == null) {

         LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         v = vi.inflate(id, null);

     }

         final Option o = items.get(position);

         if (o != null) {

             TextView fileName = (TextView) v.findViewById(R.id.FileName);
             ImageView fileIcon = (ImageView) v.findViewById(R.id.FileIcon);

             if(fileName!=null) {

                 fileName.setText(o.getName());

                 if(fileIcon!=null) {
                    if(o.getData().equalsIgnoreCase("folder")||o.getData().equalsIgnoreCase("parent directory")){
                    fileIcon.setImageRessource(<FolderIcon>)
                 } else {
                    fileIcon.setImageResouce(<FileIcon>)
                 }

             }
         }

    return v;

}
@覆盖
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
如果(v==null){
LayoutInflater vi=(LayoutInflater)c.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
v=vi.充气(id,空);
}
最终选项o=项目。获取(位置);
如果(o!=null){
TextView文件名=(TextView)v.findviewbyd(R.id.fileName);
ImageView文件图标=(ImageView)v.findViewById(R.id.fileIcon);
如果(文件名!=null){
fileName.setText(o.getName());
如果(fileIcon!=null){
如果(o.getData().equalsIgnoreCase(“文件夹”)| | o.getData().equalsIgnoreCase(“父目录”)){
fileIcon.setImageRessource()
}否则{
fileIcon.setImageResource()
}
}
}
返回v;
}

谢谢,但我不明白:这是一个noob对不起..在我的代码中我如何合并它?在你的代码中你声明:
私有FileArrayAdapter;
在这个FileArrayAdapter类中应该有方法:
getView(int位置,视图convertView,视图组父级)
。如果不想自定义FileArrayAdapter类本身,可以创建自己的类,该类扩展FileArrayAdapter并重写getView方法。