0

私はすべてのレイアウトをプログラムで表示しようとしていますが、実際には純粋な Java では実行できますが、Android では実行できません

ここに私の最初のクラスがあります:

public DiskFileExplorer(String path, Boolean subFolder) {
    super();
    this.initialpath = path;
    this.recursivePath = subFolder;
}

public String[] list() {
    return this.listDirectory(this.initialpath);
}

@SuppressWarnings("null")
private String [] listDirectory(String dir) {
    String[] values = null;
    File file = new File(dir);
    File[] files = file.listFiles();
    if (files != null) {
        for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory() == true) {
                //Log.v("Dossier" , files[i].getAbsolutePath());
                this.dircount++;
            } 
            else {
                //Log.v("Fichier" ,files[i].getName());
                values[i] = files[i].getName();
                this.filecount++;
            }
            if (files[i].isDirectory() == true && this.recursivePath == true) {
                this.listDirectory(files[i].getAbsolutePath());
            }
        }
    }
    return values;
}

そして2番目のもの:

public class MainActivity extends Activity {
    public String []DiskFileExplorer(String path, Boolean subFolder){
        return null;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView listView = (ListView) findViewById(R.id.mylist);
        String pathToExplore = "./res/layout";
        DiskFileExplorer d_expl = new DiskFileExplorer(pathToExplore,true);
        String[] values = d_expl.list();
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, android.R.id.text1, values);
        listView.setAdapter(adapter); 
    }
}

そして私のxml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/mylist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout> 

そして最終的には、私がアンドロイドでやりたいことをすることができる純粋なJavaクラス:

import java.io.File;

/**
 * Lister le contenu d'un répertoire
 * @author fobec 2010
 */
public class DiskFileExplorer {

    private String initialpath = " ";
    private Boolean recursivePath = false;
    public int filecount = 0;
    public int dircount = 0;

   /**
    * Constructeur
    * @param path chemin du répertoire
    * @param subFolder analyse des sous dossiers
    */
    public DiskFileExplorer(String path, Boolean subFolder) {
        super();
        this.initialpath = path;
        this.recursivePath = subFolder;
    }

    public void list() {
        this.listDirectory(this.initialpath);
    }

    private  void listDirectory(String dir) {
        File file = new File(dir);
        File[] files = file.listFiles();

        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                if (files[i].isDirectory() == true) {
                    System.out.println("Dossier" + files[i].getAbsolutePath());
                    this.dircount++;
                } else {
                    System.out.println("" + files[i].getName());

                    this.filecount++;
                }
                if (files[i].isDirectory() == true && this.recursivePath == true) {
                    this.listDirectory(files[i].getAbsolutePath());
                }
            }
        }
    }

    /**
     * Exemple : lister les fichiers dans tous les sous-dossiers
     * @param args
     */
    public static void main(String[] args) {
        String pathToExplore = "C:/Users/R_nkusi/workspace/Copy of AppList_bis/res/layout";
        DiskFileExplorer diskFileExplorer = new DiskFileExplorer(pathToExplore, true);
        Long start = System.currentTimeMillis();

        diskFileExplorer.list();

        System.out.println("----------");
        System.out.println("Analyse de " + pathToExplore + " en " + (System.currentTimeMillis() - start) + " mses");
        System.out.println(diskFileExplorer.dircount + " dossiers");
        System.out.println(diskFileExplorer.filecount + " fichiers");
    }
}

もちろん、「pathToExplore」を変更して、自分のコンピューターに存在するパスを指定する必要があります。

助けてくれてありがとう。

4

1 に答える 1

0

独自のXMLレイアウトファイルを読み取ることはできますが、すべてコンパイルされているため、人間が読める形式ではないため、ファイルシステムで見つけることができません。

すべてのレイアウトリソースIDとその実際の名前を取得します。

void getIds() {
    Field[] ID_Fields = R.layout.class.getFields();
    int[] resArray = new int[ID_Fields.length];
    for(int i = 0; i < ID_Fields.length; i++)
        try {
            resArray[i] = ID_Fields[i].getInt(null);
            System.out.println(resArray[i] + " : " + getResources().getResourceEntryName(resArray[i]));
            getEventsFromAnXML(getResources().getXml(resArray[i])); //I'll show this later
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
}

ただし、XMLを自分で解析する必要があります。これが小さな例です:

private String getEventsFromAnXML(XmlResourceParser xpp) throws XmlPullParserException, IOException {
    StringBuffer stringBuffer = new StringBuffer();
    xpp.next();
    int eventType = xpp.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT) {
        if(eventType == XmlPullParser.START_DOCUMENT) {
            stringBuffer.append("--- Start XML ---");
        }
        else if(eventType == XmlPullParser.START_TAG) {
            stringBuffer.append("\nSTART_TAG: "+xpp.getName());
        }
        else if(eventType == XmlPullParser.END_TAG) {
            stringBuffer.append("\nEND_TAG: "+xpp.getName());
        }
        else if(eventType == XmlPullParser.TEXT) {
            stringBuffer.append("\nTEXT: "+xpp.getText());
        }
        eventType = xpp.next();
    }
    stringBuffer.append("\n--- End XML ---");
    System.out.println(stringBuffer.toString());
    return stringBuffer.toString();
}

これらのコードが、目的の場所に到達するのに役立つことを願っています。

new AlertDialog.Builder(this)
.setTitle("Seen?")
.setMessage("Some message.")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) { 
        // ok
    }
 })
.setNegativeButton("No", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) { 
        // no
    }
 })
 .show();
于 2013-01-23T10:27:05.300 に答える