android将图标放入列表(文件浏览器)
嗨,我正在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) {
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方法。