java - Android - 如何将一个扩展名的文件添加到 ListView

标签 java android listview

我正在尝试制作一个可以查找手机中所有 pdf 的应用程序,但该应用程序崩溃了。我已经获得了在存储上写入的权限,但这没有帮助。 这是我的代码:

package prototype.reader.com;
import android.app.*;
import android.os.*;
import android.content.*;
import android.view.*;
import java.util.*;
import java.io.*;
import android.widget.*;
public class lst extends Activity 
{
    ArrayList<String> bk;
        ArrayAdapter<String> ad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, bk);
private ListView lv;
protected void onCreate(Bundle savedinstancestate){
        super.onCreate(savedinstancestate);
        setContentView(R.layout.listpdfs);
        lv = findViewById(R.id.lpdf);
       File sdCard = Environment.getExternalStorageDirectory();
        recursiveFind(sdCard);
        lv.setAdapter(ad);
    }
    public void recursiveFind(File file) { 
        File[] f = file.listFiles();
        for (File ff : f) {
            if (ff.isDirectory()) recursiveFind(file);
            if (ff.isFile() &&     ff.getPath().endsWith(".pdf")) {
                bk.add(ff.toString());
            }
            }
        }
    }

最佳答案

尝试在 arraylist 添加数据之前声明适配器错误,您设置适配器使用下面的代码

    public class lst extends Activity {
    ArrayList<String> bk;
    ArrayAdapter<String> ad;
    private ListView lv;

    protected void onCreate(Bundle savedinstancestate) {
        super.onCreate(savedinstancestate);
        setContentView(R.layout.listpdfs);
        bk = new ArrayList<>();
        lv = findViewById(R.id.lpdf);
        File sdCard = Environment.getExternalStorageDirectory();
        recursiveFind(sdCard);
        ad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, bk);
        lv.setAdapter(ad);
    }

    public void recursiveFind(File file) {
        File[] f = file.listFiles();
        for (File ff : f) {

            if (ff.isFile() && ff.getPath().endsWith(".pdf")) {
                bk.add(ff.toString());
            }
        }
    }
}

关于java - Android - 如何将一个扩展名的文件添加到 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52204918/

相关文章:

java - 如何在字符串中用 * 包围所有括号组

android - 什么是 Facebook 和 Google + 类应用程序中使用的 Rage Shake api,我可以在我的应用程序中使用相同的 api 吗?

java - 将HTTP风格的键值对解析为java.util.HashMap

android - 将英语国家名称翻译成法语(API 19)

javascript - Nativescript ListView 刷新

java - 如何使用Jsoup从html文件中获取特定数据?

java - 如何使用 Java Swing 在列表内移动并复制到另一个列表?

java - 从父类(super class)方法调用子类方法?

c# - 如何在 Winforms ListView 中获取资源管理器右键单击菜单?

java - 多次调用自定义 ListView 适配器 getView 方法,并且顺序不一致