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

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

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

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

06.11.2015, 16:04. Просмотров 287. Ответов 2
Метки нет (Все метки)

В ListFragment выводятся файлы, надо сделать возврат по кнопке "назад" для возврата в папку на уровень выше.
Вот код Activity
Кликните здесь для просмотра всего текста
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
package com.mycompany.mylistfragment;
 
import android.app.*;
import android.os.*;
import android.view.*;
 
public class MainActivity extends Activity implements SimpleListFragment.OnArticleSelectedListener
{
 
    @Override
    public void onArticleSelected(String articleStr)
    {
        selectItem(articleStr);
    }
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState == null)
        {
            selectItem("/sdcard");
        }
    }
    private void selectItem(String str)
    {
        str = str != null ? str : "/";
        SimpleListFragment fragment = SimpleListFragment.newInstance(str);
        getFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.container, fragment).commit();
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        menu.add(0, 1, 0, "Root");
        menu.add(0, 2, 0, "SD card");
        menu.add(1, 3, 0, "Exit");
        return super.onCreateOptionsMenu(menu);
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        switch (item.getItemId())
        {
            case 1:
                selectItem("/");
                break;
            case 2:
                selectItem("/sdcard");
                break;
            case 3:
                finish();
        }
        return super.onOptionsItemSelected(item);
    }
 
}
Вот код ListFragment
Кликните здесь для просмотра всего текста
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package com.mycompany.mylistfragment;
import android.app.*;
import android.view.*;
import android.os.*;
import android.widget.*;
import java.io.*;
import java.util.*;
import java.text.*;
import android.content.*;
import android.net.*;
 
public class SimpleListFragment extends ListFragment
{
    public static SimpleListFragment newInstance(String str)
    {
        SimpleListFragment fragment = new SimpleListFragment();
        Bundle bundle = new Bundle();
        bundle.putString("lastpath", str);
        fragment.setArguments(bundle);
        return fragment;
    }
 
    String CURRENT_PATH;
    private View rootView;
    private TextView tvPath;
    File[] files;
    List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
    private static final String[] from = {"icon", "name", "modify"};
    private static final int[] to = {R.id.file_icon, R.id.file_name, R.id.file_modify};
    SimpleAdapter mAdapter;
    String uri;
    OnArticleSelectedListener mListener;
 
    public interface OnArticleSelectedListener
    {
        public void onArticleSelected(String articleStr);
    }
 
    @Override
    public void onAttach(Activity activity)
    {
        super.onAttach(activity);
        try
        {
            mListener = (OnArticleSelectedListener) activity;
        }
        catch (ClassCastException e)
        {
            throw new ClassCastException(activity.toString() + "error");
        }
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        CURRENT_PATH = getArguments().getString("lastpath", "/");
        File f = new File(CURRENT_PATH);
        files = f.listFiles();
        Map<String, Object> map;
        long size;
        double fileSize;
        java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00");
        String modTime;
        String strSize;
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Arrays.sort(files);
        super.onCreate(savedInstanceState);
        for (int i = 0; i < files.length; i++)
        {
            modTime = dateFormat.format(new Date(new File(files[i].getAbsolutePath()).lastModified()));
            map = new HashMap<String, Object>();
            if (files[i].isFile())
            {
                size = files[i].length();
                if (size >= 1073741824)
                {
                    fileSize = (double) size / 1073741824.0;
                    strSize = df.format(fileSize) + "G";
                }
                else if (size >= 1048576)
                {
                    fileSize = (double) size / 1048576.0;
                    strSize = df.format(fileSize) + "M";
                }
                else if (size >= 1024)
                {
                    fileSize = (double) size / 1024;
                    strSize = df.format(fileSize) + "K";
                }
                else
                {
                    strSize = Long.toString(size) + "B";
                }
                modTime = strSize != null ? modTime + "   " + strSize : modTime;
            }
            map.put("name", files[i].getName());
            map.put("icon", files[i].isFile() ? R.drawable.file : R.drawable.folder);
            map.put("modify", modTime);
            listItems.add(map);
        }
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        rootView = inflater.inflate(R.layout.layout_fragment, container, false);
        tvPath = (TextView) rootView.findViewById(R.id.tvpath);
        tvPath.setText(CURRENT_PATH);
        return rootView;
    }
 
    @Override
    public void onActivityCreated(Bundle savedInstanceState)
    {
        mAdapter = new SimpleAdapter(getActivity(), listItems, R.layout.item_list, from, to);
        super.onActivityCreated(savedInstanceState);
        setListAdapter(mAdapter);
    }
 
    @Override
    public void onListItemClick(ListView l, View v, int position, long id)
    {
        uri = files[position].getPath();
        if (files[position].isFile())
        {
            startActivity(new Intent(Intent.ACTION_VIEW).setDataAndType(Uri.fromFile(new File(uri)), "*/*"));
        }
        else if (files[position].isDirectory() && files[position].listFiles() != null)
        {
            mListener.onArticleSelected(uri);
        }
        else
        {
            Toast.makeText(getActivity(), "No permission", Toast.LENGTH_LONG).show();
        }
        super.onListItemClick(l, v, position, id);
    }
 
}
Как тут грамотно сделать возврат по кнопке "назад"?
Миниатюры
ListFragment  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2015, 16:04     ListFragment
Посмотрите здесь:

ListFragment - Программирование Android
Всем доброго дня. Уперся малеько в дно. Из MainActivity через NavigationDrawer перехожу в ListFragment. Подскажите что делать дальше?...

Listfragment Super - Программирование Android
Добрый день в где тут проблема. public class ItemFragment extends ListFragment { @Override protected void...

ListFragment не получается - Программирование Android
Почему то не получается добавить фрагмент. При попытке добавления, программма вылетает с ошибкой. ЧТо делаю не так? Код мейнактивиту где...

ExpandableListView внутри ListFragment - Программирование Android
Здравствуйте, мне внутри listFragment нужно сделать ExpandableListView. Как делать обычный listView я разобрался, с этим немогу...

Перевод Activity в ListFragment - Программирование Android
Здравствуйте! Возникла очень большая проблема связанная с переводом Activity в ListFragment. А именно тут (не реклама). Проблема...

Обновить вид ListFragment - Программирование Android
package in.wptrafficanalyzer.navigationtabdemo; import java.util.ArrayList; import java.util.List; import...

ListFragment - своя разметка item - Программирование Android
А как свою разметку каждого item подсунуть в ListFragment? Вот как есть сейчас и работает: @Override public void...

ListFragment вывод данных (adapter) - Программирование Android
Доброго дня! Я новичек в Android программировании. Попытался создать проект на основе шаблона NavigationDrawner и реализовал...

Боковое меню (Navigation Drawer) в ListFragment - Программирование Android
Вообщем нужно реализовать данный паттерн в ListFragment, и возникли некоторые вопросы. XML файл для реализации меню обрабатывается в...

Как обновить viewpager или listfragment? - Программирование Android
Добрый день! Помогите пожалуйста разобраться в следующем вопросе. У меня есть ViewPager с FragmentPagerAdapter и десять ListFragment...

Как использовать свою разметку для ListFragment? - Программирование Android
Всех с праздниками. Подскажите как использовать (какую лучше) свою разметку для ListFragment?

Как с ListFragment передать имя файла чтобы открыть его в другом Активити? - Программирование Android
Всем привет, я новичек! ломаю голову над такой задачей: Есть ListFragment со списком &quot;приборов&quot; мне надо при нажатии на нужный прибор...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zoleg
14 / 14 / 1
Регистрация: 10.01.2012
Сообщений: 140
07.11.2015, 21:22     ListFragment #2
Можно как костыль просто повторно запустить Активити.
Java
1
2
3
4
5
6
7
    public static void onRestartActivity(Activity act) {
        Intent intent = new Intent();
        intent.setClass(act, act.getClass());
        act.startActivity(intent);
        act.finish();
 
    }
Dont
0 / 0 / 0
Регистрация: 06.11.2015
Сообщений: 2
07.11.2015, 21:36  [ТС]     ListFragment #3
zoleg, Можно в функцию код с адаптером поместить, чтоб не переходить по папкам через Activity.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 public void getPaht(String str){
        CURRENT_PATH = str;
        listItems = new ArrayList<Map<String, Object>>();
        File file = new File(CURRENT_PATH);
        files = file.listFiles();
        Map<String, Object> map;
        String fileSize;
        Arrays.sort(files);
        for (int i = 0; i < files.length; i++)
        {
            map = new HashMap<String, Object>();
            fileSize = files[i].isFile() ? "  " + fSize(files[i]) : "";
            map.put("name", files[i].getName());
            map.put("icon", files[i].isFile() ? R.drawable.file : R.drawable.folder);
            map.put("modify", mData(files[i]) + fileSize);
            listItems.add(map);
        }
 
        mAdapter = new SimpleAdapter(getActivity(), listItems, R.layout.item_list, from, to);
        setListAdapter(mAdapter);
        tvPath.setText(CURRENT_PATH);
    }
Надо как-то кнопку "назад" сделать onBackPressed или что-то подобное.
Ответ Создать тему
Опции темы

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