Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
krettt
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 22
#1

Файловый менеджер на андроид - Программирование Android

17.07.2013, 01:00. Просмотров 583. Ответов 3
Метки нет (Все метки)

Доброго времени суток всем . Начал работать над реализацией простого файлового мененджера(всего два класса). Проблема в том что, когда я нажимаю на пункт меню , вылетает исключение : (так и не понял в чем проблема)
Java
1
2
3
4
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
        at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
        at java.util.ArrayList.get(ArrayList.java:304)
        at com.FileExplorer.FileSystemAdapter.getView(FileSystemAdapter.java:46)
вот код приложения
Главный класс
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
public class MainActivity extends Activity
{
    FileSystemAdapter adapter;
    ListView lv;
    ArrayList<String> directoryEntries ;
    ArrayList<Boolean> isFolders;
    File currentDirectory ;
    TextView textTitle ;
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
 
        textTitle = (TextView)findViewById(R.id.textTitle);
        browseTo(Environment.getExternalStorageDirectory());
    }
    private void browseTo(File directory)
    {
        if(directory.isDirectory())
        {
            currentDirectory = directory;
            fill(directory.listFiles());
 
            textTitle.setText(directory.getAbsolutePath());
        }
        else
        {
            Intent intent = new Intent(Intent.ACTION_VIEW , Uri.parse("file://" + directory.getAbsolutePath()));
            startActivity(intent);
        }
 
    }
 
    private void fill(File[] files)
    {
        if(files == null)
        {
            Toast.makeText(this,"fill empty argument ",Toast.LENGTH_LONG).show();
            return ;
        }
 
        directoryEntries = new ArrayList<String>();
        isFolders = new ArrayList<Boolean>();
 
        if(currentDirectory.getParent() != null)
            directoryEntries.add("..");
 
        for(File file : files)
        {
            directoryEntries.add(file.getAbsolutePath());
            isFolders.add(file.isDirectory());
        }
        adapter = new FileSystemAdapter(this,directoryEntries,isFolders);
 
        if(lv == null)
            lv = (ListView)findViewById(R.id.listView);
 
        else
            adapter.notifyDataSetChanged();
 
        lv.setAdapter(adapter);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView <?> parent, View view, int position, long id)
            {
                String selectedFileString = directoryEntries.get(position);
                if(selectedFileString.equals(".."))
                    upOneLevel();
                else
                {
                    File clickedFile = new File(selectedFileString);
                    browseTo(clickedFile);
                }
            }
        });
    }
 
    private void upOneLevel()
    {
        if(currentDirectory.getParent() != null)
        {
            browseTo(currentDirectory.getParentFile());
        }
 
    }
}
и еще класс наследник BaseAdapter

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class FileSystemAdapter extends BaseAdapter
{
    LayoutInflater inflater;
    ArrayList<String> files;
    ArrayList<Boolean> isFolder;
    Context ctx;
    public FileSystemAdapter(Context ctx ,ArrayList<String> files,ArrayList<Boolean> isFolder)
    {
        this.files = files;
        this.ctx = ctx;
        this.isFolder = isFolder;
        inflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount()
    {
        return files.size();
    }
    @Override
    public Object getItem(int position)
    {
        return files.get(position);
    }
    @Override
    public long getItemId(int position)
    {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View v = inflater.inflate(R.layout.item,parent,false);
        ImageView imageFolder = (ImageView)v.findViewById(R.id.imageFolder);
        if(isFolder.get(position))
            imageFolder.setImageResource(R.drawable.folder);
 
        TextView textItem = (TextView)v.findViewById(R.id.textItem);
        textItem.setText(files.get(position));
        return v;
    }
}
Также есть два layout : textView и ListView ; пункт меню только TextView и ,если это папка, то ImageView
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2013, 01:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Файловый менеджер на андроид (Программирование Android):

Файловый менеджер - Программирование Android
здравствуйте,возник вопрос как отображать содержимое папки? например есть папка в которой находятся файлы разных типов,пользователь зашел в...

Файловый менеджер - Программирование Android
public class Main extends AppCompatActivity { ListView lv; File curDir; File files; Button quit; ...

Файловый менеджер для андроида - Программирование Android
Проблема такая-задали курсач по этой теме. Нужен обзор этих самых менеджеров (алгоритмы, свойства, плюсы/минусы) В общем вся информация по...

Воспроизведение mp3 в программе, способной это сделать(файловый менеджер) - Программирование Android
Здравствуйте, уважаемые форумчане, я недавно пополнил ряды новичков в программировании под android и решил запрограммировать файловый...

Можно ли написать веб сервер на Яве для клиента на Андроид,имея под рукой только телефон на том самом андроид? - Программирование Android
Уважаемые гуру программирования, если можно, пожалуйста, напишите поподробнее- какой программой компилировать код, какой лучше выбрать...

Файловый менеджер - C#
Скажите пожалуйста,как с помощью Windows Forms создать файловый менеджер?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
17.07.2013, 01:03 #2
выход за пределы границы в 46 строке класса FileSystemAdapter
0
krettt
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 22
17.07.2013, 01:09  [ТС] #3
Цитата Сообщение от V0v1k Посмотреть сообщение
выход за пределы границы в 46 строке класса FileSystemAdapter
Не понятно по какой причине выход за предел массива происходит ,при нажатий на пункт меню , при старте всё нормально.
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
17.07.2013, 01:16 #4
подебагайте.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2013, 01:16
Привет! Вот еще темы с ответами:

файловый менеджер - C++
Прошу дать информацию на работу с файлами (статьи, книги) в срр, точнее необходимо сделать что-то вроде файлового менеджера с функциями...

Файловый менеджер FAR - Системный софт
Доброго всем времени суток! Пытался несколько раз поставить себе FAR, но каждый раз все упиралось в регистрацию! Ну никак не могу правильно...

Файловый менеджер - C++
Помогите пожалуйста!!! Мне нужен файловый менеджер на Win32... (не знаю как отоброзить содержимое директории..) заранее спасибо

файловый менеджер - C++
помогите пожауйста!!! задание: написать программу файловый менеджер. желательно на с++. какой нужен компонент и что прописать чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.07.2013, 01:16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru