Проблема с ListFragment, который отображает файлы - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть проблема, о которой я сказал в заголовке. Я хочу отображать только текстовые файлы из внутреннего хранилища моего телефона для обработки его по щелчку. Моя проблема в том, что он не распознает ListView.Я пробовал много разных решений, но это не сработало. У кого-нибудь есть идеи? Ниже приведен код из класса.Спасибо

public class Tab3 extends ListFragment {

private ListView listView;
    private String fileNames[];
    View mView;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        listView = getActivity().findViewById(R.id.listView);
        ArrayList<File> files = readFiles(Environment.getExternalStorageDirectory());

        fileNames = new String[files.size()];
        for (int i = 0; i < files.size(); ++i) {
            fileNames[i] = files.get(i).getName().toString().replace(".txt", "");
        }
        ListAdapter listAdapter = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, fileNames);
        setListAdapter(listAdapter);
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mView = inflater.inflate(R.layout.fragment_tab3, container, false);
        return mView;
    }


    private ArrayList<File> readFiles(File root) {
        ArrayList<File> arrayList = new ArrayList<File>();
        File files[] = root.listFiles();

        for (File file : files) {
            if (file.isDirectory()) {
                arrayList.addAll(readFiles(file));
            } else {
                if (file.getName().endsWith(".txt")) {
                    arrayList.add(file);
                }
            }
        }
        return arrayList;
    }
}

ОБНОВЛЕНИЕ

public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            Fragment fragment=null;
            switch (position){
                case 0:
                    Tab1Values tab1=new Tab1Values();
                    return tab1;
                case 1:
                    Tab2Map tab2=new Tab2Map();
                    return tab2;
                case 2:
                    Tab3 tab3=new Tab3();
                    return tab3;
            }
            return fragment;
        }
        @Override
        public int getCount() {
            // Show 3 total pages.
            return 3;
        }
    }

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Я думаю, у меня проблема.onCreateView() вызывается после onCreate().Таким образом, в основном вы используете findViewById(), прежде чем раздувать макет.Переместите код в onCreate() на onCreateView().Это решит проблему.

РЕДАКТИРОВАТЬ: Также замените getActivity().findViewById на mView.findViewById()

0 голосов
/ 24 декабря 2018

Я думаю, что это должно быть listView.setAdapter(listAdapter);

...