2013-04-08 46 views
1

我正在实现一个简单的文件浏览器,我有导航工作(感谢在线来源)现在我想要一个家庭和后退按钮直接导航到设置的根和到父目录分别。我做了一个操作栏并添加了两个按钮,但我不知道如何让它们正常工作。最后一个功能是设置按钮功能。对不起提前如果我不发布的代码可以正确 以下是代码我有(我扩展ListActivity):家庭和后退按钮的文件浏览器android

private List<String> item = null; 
private List<String> path = null; 
private String root; 
private TextView myPath; 
private File f; 


@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    myPath = (TextView)findViewById(R.id.path); 

    root = Environment.getExternalStorageDirectory().getPath(); 

    getDir(root); 
} 

private void getDir(String dirPath) 
{ 
myPath.setText("Location: " + dirPath); 
item = new ArrayList<String>(); 
path = new ArrayList<String>(); 
f = new File(dirPath); 
File[] files = f.listFiles(); 

if(!dirPath.equals(root)) 
{ 
    //item.add(root); 
    //path.add(root); 
    item.add("../"); 
    path.add(f.getParent()); 
} 

for(int i=0; i < files.length; i++) 
{ 
    File file = files[i]; 

    if(!file.isHidden() && file.canRead()){ 
    path.add(file.getPath()); 
     if(file.isDirectory()){ 
     item.add(file.getName() + "/"); 
     }else{ 
     item.add(file.getName()); 
     } 
    } 
} 

ArrayAdapter<String> fileList = 
    new ArrayAdapter<String>(this, R.layout.rows, item); 
setListAdapter(fileList); 
} 

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    // TODO Auto-generated method stub 
    File file = new File(path.get(position)); 

    if (file.isDirectory()) 
    { 
     if(file.canRead()){ 
      getDir(path.get(position)); 
     }else{ 
      new AlertDialog.Builder(this) 
      .setIcon(R.drawable.ic_launcher) 
      .setTitle("[" + file.getName() + "] folder can't be read!") 
      .setPositiveButton("OK", null).show(); 
     } 
    }else { 
     new AlertDialog.Builder(this) 
     .setIcon(R.drawable.ic_launcher) 
     .setTitle("[" + file.getName() + "]") 
     .setPositiveButton("OK", null).show(); 

    } 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
    switch(item.getItemId()){ 
    case R.id.home: 
     path.add(root); 
     return true; 

    case R.id.back: 
     path.add(f.getParent()); 
     return true; 

    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

**的代码 结束谢谢

+0

编辑我的帖子添加更多详细信息 – user1006281 2013-04-08 05:39:44

回答

0

如果你是使用listview,尝试做mListView.invalidateViews()。 如果您使用的是listActivity,只需调用mList.invalidateViews()。

+0

谢谢你的回复。我真的不明白你的答案;我应该在哪里调用这个方法,它有什么作用?这是我第一次尝试应用程序,所以我不太了解。 – user1006281 2013-04-08 04:51:41

+0

在返回语句之前调用path.add(XX)之后,在函数onOptionsItemSelected()中。 – Robin 2013-04-08 04:57:07

+0

关于我的代码,应该用什么来代替mList? (你说打电话给mList.invalidateViews()) – user1006281 2013-04-08 05:20:18