在Android中的ListView中打开文本文件

时间:2015-05-28 05:30:57

标签: android file listview android-edittext fileinputstream

我正在开发一个简单的文字处理应用程序,除了我有一个问题之外,我已经接近能够发布它了。当我单击ListView中显示用户使用我的应用程序创建的所有文本文件的文件名的项目时,我想打开与项目名称对应的文件,并将该文件中的文本放在用户用来输入数据的主EditText。但是,单击该项时,没有任何反应。这是我的行动代码。

    filesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {



                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    String itemName = filesListView.getItemAtPosition(position).toString();
                    FileInputStream fis;
                    String content = null;

                    try {
                        fis = openFileInput(itemName);
                        byte[] input = new byte[fis.available()];

                        while (fis.read(input) != -1) {
                            content += new String(input);

                        }
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    textEntryEditText = (EditText) findViewById(R.id.textEntryEditText);
                    textEntryEditText.setText(content);
                }
            });

请帮忙。谢谢!

编辑:已解决,请查看我的答案,看看我做了什么。

4 个答案:

答案 0 :(得分:0)

listView项目的焦点可能有问题。对于ListView中的editText,可聚焦为false。

答案 1 :(得分:0)

尝试从Listview适配器获取文件或路径对象而不是文件名。 当使用openFileInput(String)方法时,它从应用程序文件文件夹创建或从该文件位置获取文件。所以使用BaseAdapter并使用getItem(int)方法获取File对象

答案 2 :(得分:0)

我相信你正在使用任何一个dapter将数据绑定到listView, 所以在自定义适配器类

if(convertView==null){
            convertView.setTag(holder);
            convertView.setTag(R.string.fileName, array.get(position).getfileName());
}else {

            holder = (ViewHolder) convertView.getTag();
            }

然后在项目点击尝试获取这样的文件名

fileName = view.getTag(R.string.fileName).toString();

答案 3 :(得分:0)

没关系,我解决了。经过几个小时的流泪,愤怒和沮丧,我终于解决了,哈哈。但是谢谢大家的回应。至于有类似问题的其他人,这就是我所做的。

     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    String itemName = filesListView.getItemAtPosition(position).toString();
                    StringBuffer fileRead = new StringBuffer("");

                        try {
                            FileInputStream fileInputStream = new FileInputStream(new File(getDir("FOLDER", Context.MODE_APPEND), itemName));
                            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
                            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

                            String readString = bufferedReader.readLine();

                            while (readString != null) {
                                fileRead.append(readString);
                                readString = bufferedReader.readLine();
                            }
                            fileInputStream.close();
                            inputStreamReader.close();
                            bufferedReader.close();
                            textEntryEditText.setText(fileRead);
                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                }


            });

我之前使用openFileInput的方法存在缺陷,因为我试图在openFileInput查找的默认目录中找到该文件,而该文件不在我的文件所在的位置。之后,我尝试直接引用它,并发现openFileInput不允许这样做。因此,我最终尝试创建一个新的FileInputStream,并告诉它创建一个新的File对象,该对象使用getDir方法引用目录FOLDER,以及由itemName确定的文件名。希望这有助于其他像我一样挣扎的人,这样他们就不必像我一样受苦。再次感谢那些回复的人,即使我没有使用你的建议!