구현할 일이 있어서 소스 찾아봤는데
뭐가 그리 복잡하게 덕지덕지 붙여 놨는지
CCCV 못하게 할 거면 왜 써놓은 건지
제일 참고할 만한 자료는 퀴즈처럼 중간중간에 비워놓은 것을 짜증나서 뜯어고쳐서 적어둠.
MainActivity.java
package com.newkie.fileexplorer;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity
{
private String mFileName;
private ListView lvFileControl;
private Context mContext = this;
private List<String> lItem = null;
private List<String> lPath = null;
private String mRoot = Environment.getExternalStorageDirectory().getAbsolutePath();
private TextView mPath;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPath = (TextView) findViewById(R.id.tvPath);
lvFileControl = (ListView)findViewById(R.id.lvFileControl);
getDir(mRoot);
lvFileControl.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
File file = new File(lPath.get(position));
if (file.isDirectory())
{
if (file.canRead())
getDir(lPath.get(position));
else
{
Toast.makeText(mContext, "No files in this folder.", Toast.LENGTH_SHORT).show();
}
}
else
{
mFileName = file.getName();
Log.i("Test","ext:"+mFileName.substring(mFileName.lastIndexOf('.') + 1, mFileName.length()));
}
}
});
}
private void getDir(String dirPath)
{
mPath.setText("Location: " + dirPath);
lItem = new ArrayList<String>();
lPath = new ArrayList<String>();
File f = new File(dirPath);
File[] files = f.listFiles();
if (!dirPath.equals(mRoot))
{
//item.add(root); //to root.
//path.add(root);
lItem.add("../"); //to parent folder
lPath.add(f.getParent());
}
for (int i = 0; i < files.length; i++)
{
File file = files[i];
lPath.add(file.getAbsolutePath());
if (file.isDirectory())
lItem.add(file.getName() + "/");
else
lItem.add(file.getName());
}
ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, lItem);
lvFileControl.setAdapter(fileList);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tvPath"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<ListView
android:id="@+id/lvFileControl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#ffffff" >
</ListView>
</LinearLayout>
그리고 MANIFEST에
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
추가한다.
소스상에선 WRITE는 쓸 일이 없으니 빼도 무관.
간단한 소스이니 좀만 들여다보면 세부 기능 구현이 가능할 것.(root를 바꾼다거나 확장자에 따라서 눌렀을때 처리한다거나)
'안드로이드' 카테고리의 다른 글
Strings 에서 parameter 넣기 (0) | 2015.05.11 |
---|---|
숏컷(바로가기) 생성하기 (0) | 2014.12.22 |
어플리케이션 중복 실행 방지 (0) | 2014.08.19 |
안드로이드 네이버 지도 API 분석중 (0) | 2013.08.05 |
WheelView(WheelPicker) Click Event (0) | 2013.07.01 |