我正在开发一个简单的文字处理应用程序,我已经接近能够发布它,除了我有一个问题。当我点击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确定的文件名。希望这能帮助那些和我一样挣扎的人,这样他们就不用像我一样受苦了。再次感谢那些回复我的人,即使我没有采纳你的建议!