有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ListView在目录中显示文件时出错

这是我的密码:

package com.test.testing;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;

import 安卓.app.Fragment;
import 安卓.content.Context;
import 安卓.content.Intent;
import 安卓.content.SharedPreferences;
import 安卓.graphics.Color;
import 安卓.os.Bundle;
import 安卓.os.Environment;
import 安卓.text.Editable;
import 安卓.text.TextWatcher;
import 安卓.text.format.DateFormat;
import 安卓.view.LayoutInflater;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.view.inputmethod.InputMethodManager;
import 安卓.widget.AdapterView;
import 安卓.widget.ArrayAdapter;
import 安卓.widget.Button;
import 安卓.widget.EditText;
import 安卓.widget.ListView;
import 安卓.widget.RadioGroup;
import 安卓.widget.RadioGroup.OnCheckedChangeListener;
import 安卓.widget.RelativeLayout;
import 安卓.widget.TextView;
import 安卓.widget.Toast;

public class PreviousTrip extends Fragment {
    int i;
    String k = "";

    @Override
    public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) {
        final RelativeLayout mFrame3 =  (RelativeLayout) inflater.inflate( R.layout.ptrip, container, false );

        File folder = new File(Environment.getExternalStorageDirectory() + "/tc/");
        ListView lv;
        ArrayList<String> FilesInFolder = GetFiles(folder);
        lv = (ListView) mFrame3.findViewById(R.id.lvFiles);

        lv.setAdapter(new ArrayAdapter<String>(this,
            安卓.R.layout.ptrip, FilesInFolder));

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                // Clicking on items
             }
        });

        /*File[] filelist = folder.listFiles();
        String[] theNamesOfFiles = new String[filelist.length];
        if (filelist.length > 0) {
            for (i = 0; i < theNamesOfFiles.length; i++) {
                long lastTime = filelist[i].lastModified();
                String dateString = DateFormat.format("MM/dd/yyyy", new Date(lastTime)).toString();
                theNamesOfFiles[i] = filelist[i].getName();
                k = k + String.valueOf(theNamesOfFiles[i]) + " " + dateString + "\n";
            }
            Toast.makeText(getActivity(), k, Toast.LENGTH_SHORT).show();
        }
        else {
            Toast.makeText(getActivity(), "no files", Toast.LENGTH_SHORT).show();
        }*/

        return mFrame3;
    }

    public ArrayList<String> GetFiles(String DirectoryPath) {
        ArrayList<String> MyFiles = new ArrayList<String>();
        File f = new File(DirectoryPath);

        f.mkdirs();
        File[] files = f.listFiles();
        if (files.length == 0)
            return null;
        else {
            for (int i=0; i<files.length; i++) 
                MyFiles.add(files[i].getName());
        }

        return MyFiles;
    }
}

我的ptrip XML看起来像:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:tools="http://schemas.安卓.com/tools"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    安卓:paddingBottom="@dimen/activity_vertical_margin"
    安卓:paddingLeft="@dimen/activity_horizontal_margin"
    安卓:paddingRight="@dimen/activity_horizontal_margin"
    安卓:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    安卓:background="@drawable/bginset3" >

    <ListView
        安卓:id="@+id/lvFiles"
        安卓:layout_width="fill_parent"
        安卓:layout_height="wrap_content" >

    </ListView>

</RelativeLayout>

我收到以下我将帮助解决的错误:

ArrayList<String> FilesInFolder = GetFiles(folder);错误The method GetFiles(String) in the type PreviousTrip is not applicable for the arguments (File) 已修复ArrayList<String> FilesInFolder = GetFiles(folder.toString());

lv.setAdapter(new ArrayAdapter<String>(this, 安卓.R.layout.ptrip, FilesInFolder));错误ptrip cannot be resolved or is not a field

除上述内容外,我还尝试在卡片视图中显示每个项目,如Play Store中的“我的应用程序”,如下所示:

enter image description here


共 (2) 个答案

  1. # 1 楼答案

    ArrayList<String> FilesInFolder = GetFiles(folder); 
    Error: The method GetFiles(String) in the type PreviousTrip is not applicable for the arguments (File) 
    Fixed: ArrayList<String> FilesInFolder = GetFiles(folder.toString());
    

    我建议您使用folder.getName()而不是folder.toString()

    lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.ptrip, FilesInFolder)); 
    Error: ptrip cannot be resolved or is not a field
    

    首先,只有当some_layout是android框架的一部分时,才能使用android.R.layout.some_layout

    如果R.layout.ptrip是您的布局之一,则必须向构造函数提供此布局中TextViewid。例如,您的初始化应该如下所示:

    lv.setAdapter(new ArrayAdapter<String>(this, R.layout.ptrip,
                                   R.id.some_textview_inside_layout_ptrip, FilesInFolder)); 
    

    如果布局文件ptrip中只有一个TextView,则以下情况不会导致错误:

        lv.setAdapter(new ArrayAdapter<String>(this, R.layout.ptrip, FilesInFolder));  
    
  2. # 2 楼答案

    有很多错误

    您的列表视图项使用了错误的布局ptrip。项布局必须具有带有android:id = "@android:id/text1"TextView才能自动使用ArrayAdapter

    下面是一些经过改进的代码:

    public class PreviousTrip extends Fragment {
        int i;
        String k = "";
    
        @Override
        public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) {
            final RelativeLayout mFrame3 =  (RelativeLayout) inflater.inflate( R.layout.ptrip, container, false );
            final ListView lv = (ListView) mFrame3.findViewById(R.id.lvFiles);
    
            final File directory = new File(Environment.getExternalStorageDirectory(), "tc");
    
            final ArrayList<String> files = GetFiles(directory);
    
            final ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,files);
    
            lv.setAdapter(adapter);
    
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                    // Clicking on items
                }
            });
    
            return mFrame3;
        }
    
        public ArrayList<String> GetFiles(File directory) {
            ArrayList<String> files = new ArrayList<String>();
    
            directory.mkdirs();
    
            if(!directory.exists()){return files;}
    
            File[] fileArray = directory.listFiles();
            for (int i=0; i<fileArray.length; i++){
                files.add(fileArray[i].getName());
            }
    
            return files;
        }
    }