快速搜尋手機上某檔案
阿新 • • 發佈:2019-01-22
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(newTextWatcher() { @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>