1. 程式人生 > >快速搜尋手機上某檔案

快速搜尋手機上某檔案

public class SearchFileActivity extends Activity{
    List<String> list=new ArrayList<>();
    private ArrayAdapter<String> adapter;
    private List<String> pathlist=new ArrayList<>();

    @Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.searchfile
); EditText search_edit=findViewById(R.id.search_edit); ListView search_list=findViewById(R.id.search_list); adapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, list); search_list.setAdapter(adapter); search_edit.addTextChangedListener(new
TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { list.clear();
//預設為sd卡,但是此時搜尋較為卡頓,建議制定到某資料夾內部
                searchFile(charSequence.toString().trim(), "/sdcard/"
); adapter.notifyDataSetChanged(); } @Override public void afterTextChanged(Editable editable) { } }); search_list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) { String s = list.get(i); //s為選定的資料夾路徑 } }); } private void searchFile(String filename, String path) { File[] files = null; try { files = new File(path).listFiles(); } catch (Exception e) { files = null; Toast.makeText(this, "搜尋", Toast.LENGTH_SHORT).show(); return; } for (File file : files) { if (file.isDirectory() && file.listFiles() != null) { searchFile(filename, file.getPath()); } else if (file.isFile()) { if (filename == null || filename.isEmpty()) { list.add(file.getPath()); } else { String name = file.getName(); if (name.indexOf(filename) != -1) { list.add(file.getPath()); } } } } } }
佈局檔案
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="30dp">
<EditText
android:id="@+id/search_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
    <ListView
android:id="@+id/search_list"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>

</LinearLayout>