2014. 10. 2. 18:29

구현할 일이 있어서 소스 찾아봤는데


뭐가 그리 복잡하게 덕지덕지 붙여 놨는지


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를 바꾼다거나 확장자에 따라서 눌렀을때 처리한다거나)

Posted by newkie