2015-05-28 2 views
1

Я работаю над простым текстовым приложением, и я близок к возможности его выпуска, за исключением того, что у меня есть одна проблема. Когда я нажимаю на элемент в ListView, который отображает имена файлов всех текстовых файлов, которые пользователь создал с моим приложением, я хотел бы открыть файл, соответствующий имени элемента, и поместить текст из этого файла внутри основной EditText, который пользователь использует для ввода данных. Однако, когда элемент щелкнут, ничего не происходит. Вот мой код для этого действия.Открытие текстовых файлов в ListView в Android

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); 
       } 
      }); 

Пожалуйста, помогите. Благодаря!

EDIT: SOLVED, проверьте мой ответ, чтобы узнать, что я сделал.

ответ

0

Возможно, возникла проблема с фокусируемыми элементами listView. Задайте значение focusable для false для editText в ListView.

+0

Попробуйте добавить тост-сообщение, чтобы узнать, работает ли функция щелчка –

0

Попытайтесь получить файл или объект пути из адаптера Listview, а не имя файла. при использовании метода openFileInput (String) он создает или получает файл из папки файлов приложений не из этого файла. поэтому используйте BaseAdapter и получить объект File с помощью метода GetItem (INT)

+0

, например File file = (File) listview.getAdapter(). GetItem (position); – ravi

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(); 
0

Ничего, я решил. После нескольких часов слез, ярости и разочарования я, наконец, решил это, LOL. Но спасибо всем, кто ответил. Что касается любого другого, у кого есть аналогичная проблема, вот что я сделал.

 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. Надеюсь, это поможет другим, кто боролся, как я, так что им не нужно страдать, как я. Еще раз спасибо тем, кто ответил, даже если я не использовал ваш совет!

Смежные вопросы