无法在文本视图中显示文件内容

时间:2020-05-27 10:52:39

标签: java android textview android-alertdialog

我正在尝试从警报对话框中选择一个文件,当我按OK时,我应该使用display Content()方法在文本视图中以文本视图显示所选文件的内容,该方法将所选文件读取并显示内容一行一行地显示,但是它什么也不显示,我认为问题出在调用上,因为我已经在另一个应用程序中使用了该方法并且可以正常工作。

这是我拥有的代码以及如何调用displayContent()

            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
            dialogBuilder.setTitle("Single Choice List")
                    .setSingleChoiceItems(files, 0, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            selectionID = which;
                        }
                    })
                    .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //display the content of the selected file
                            displayContent();
                            Toast.makeText(View_Records.this, "You selected " + files[selectionID], Toast.LENGTH_SHORT).show();

                        }
                    })

这是displayContent()的代码:

private void displayContent(){

    try {
        myFilesDirectory = new File(getFilesDir(), "MyFiles");
        String fileName = files[selectionID] + ".txt";
        File file = new File(myFilesDirectory, fileName);
        String text;
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(isr);
        StringBuilder sb = new StringBuilder();
        while ((text = br.readLine()) != null) {
            sb.append(text).append("\n");
        }
        txtViewRecords.setText(sb.toString());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:0)

替换

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
            dialogBuilder.setTitle("Single Choice List")
                    .setSingleChoiceItems(files, 0, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            selectionID = which;
                        }
                    })
                    .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //display the content of the selected file
                            displayContent();
                            Toast.makeText(View_Records.this, "You selected " + files[selectionID], Toast.LENGTH_SHORT).show();

                        }
                    })

调用另一种Activity风格的startActivityForResult()dialog),您将选择一个File并返回Intent的路径,然后在{ {1}},您只需使用它打开onActivityResult(),然后在File内显示其内容。

否则,您可以尝试先使用TextView并添加create()。像这样:

onDismissListener()

我不确定,但这应该使用AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); // do you things with builder AlertDialog ad = builder.create(); ad.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialogInterface) { // here you open file, read content and put it inside TextView` } }); ad.show() 来完成,而无需为此创建AlertDialog

这是用于从目录获取所有文件:

Activity

您只需发送public static ArrayList<File> listFiles(File folder) { if (folder.isDirectory()) { ArrayList<File> tempList = new ArrayList<>(); File[] files = folder.listFiles(); for (File inFile : files) { if (!inFile.isDirectory()) { tempList.add(inFile); } } /*Collections.sort(tempList, new Comparator<File>() { //you can sort by name @Override public int compare(File file1, File file2) { return file1.getName().compareTo(file2.getName()); } });*/ return tempList; } return null; } 作为参数。 另外,如果您100%确保所有文件都是文件而不是目录,则可以跳过检查myFilesDirectory,并返回if(!inFile.isDirectory())。 然后,您只需使用Arraylist.get(selectionID)来获取文件,具体取决于要从方法返回的内容。

方法也不必是array[selectionID]。我已经static满足了我的项目需求。