在Android的ListView中打开文本文件



我正在开发一个简单的文字处理应用程序,我已经接近能够发布它,除了我有一个问题。当我点击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);
                }
            });

请帮助。谢谢!

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

listView项的可聚焦性可能存在问题。将ListView中的editText的可对焦设置为false

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

我相信你正在使用任何一个适配器来绑定数据到你的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();

没关系,我解决了。经过几个小时的眼泪、愤怒和沮丧,我终于解决了这个问题,哈哈。但是谢谢每个回复我的人。对于其他有类似问题的人,我是这样做的。

     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确定的文件名。希望这能帮助那些和我一样挣扎的人,这样他们就不用像我一样受苦了。再次感谢那些回复我的人,即使我没有采纳你的建议!

相关内容

  • 没有找到相关文章

最新更新