【问题标题】:Opening Text Files Within ListView in Android在 Android 的 ListView 中打开文本文件
【发布时间】:2015-05-28 05:30:56
【问题描述】:

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

请帮忙。谢谢!

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

【问题讨论】:

    标签: android file listview android-edittext fileinputstream


    【解决方案1】:

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

    【讨论】:

    • 尝试添加 toast 消息,看看点击功能是否按预期工作
    【解决方案2】:

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

    【讨论】:

    • like File file=(File)listview.getAdapter().getItem(position);
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 2017-11-27
        • 2017-06-04
        • 1970-01-01
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        相关资源
        最近更新 更多