显示文件的ListFragment问题

时间:2018-12-24 12:47:30

标签: android arraylist android-listfragment

我有标题中提到的问题。我只想显示电话内部存储中的txt文件,以便在单击时进行处理。我的问题是它无法识别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 :(得分:0)

我认为应该是listView.setAdapter(listAdapter);

答案 1 :(得分:0)

我认为我有问题。 onCreateView()onCreate()之后被调用。因此,基本上,您在扩大布局之前使用findViewById()。将onCreate()中的代码移至onCreateView()。它将解决问题。

编辑:还将getActivity().findViewById替换为mView.findViewById()