显示文件的列表片段出现问题



我有我在标题中说的问题。我只想显示手机内部存储中的txt文件,以便在单击时进行处理。我的问题是它无法识别列表视图。我尝试了许多不同的解决方案,但没有奏效。有人知道吗?下面是类中的代码。谢谢

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

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

我想

我遇到了问题。 onCreateView()onCreate() 之后调用。所以基本上你在膨胀布局之前使用findViewById()。将onCreate()中的代码移动到 onCreateView() 。它将解决问题。

编辑:也用mView.findViewById()替换getActivity().findViewById

最新更新