(Java)声明要在其他类中使用的ArrayList

时间:2014-07-20 14:39:57

标签: java android arraylist global-variables

我有以下代码作为最终结果,给出了Android设备中大于500 KB的图像列表:

package com.click;

import java.io.File;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Environment;
import android.widget.LinearLayout;
import android.widget.TextView;



public class SkanerActivity extends Activity {
    private File root;
    private ArrayList<File> fileList = new ArrayList<File>();
    private LinearLayout view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_skaner);


        //TEST
        view = (LinearLayout) findViewById(R.id.view);

        //getting SDcard root path
        root = new File(Environment.getExternalStorageDirectory()
                .getAbsolutePath());
        getfile(root);

        for (int i = 0; i < fileList.size(); i++) {
            TextView textView = new TextView(this);
            textView.setText(fileList.get(i).getName());
            textView.setPadding(5, 5, 5, 5);

            System.out.println(fileList.get(i).getName());

            if (fileList.get(i).isDirectory()) {
                textView.setTextColor(Color.parseColor("#FF0000"));
            }
            view.addView(textView);
        }

    }

    public ArrayList<File> getfile(File dir) {
        File listFile[] = dir.listFiles();
        if (listFile != null && listFile.length > 0) {
            for (int i = 0; i < listFile.length; i++) {

                if (listFile[i].isDirectory()) {
                    // Zakomentowane aby nie dodawac do listy folderów
                    // fileList.add(listFile[i]);
                    getfile(listFile[i]);

                } else if (listFile[i].length() >= 500 * 1024)  {
                    if (listFile[i].getName().endsWith(".png")
                            || listFile[i].getName().endsWith(".jpg")
                            || listFile[i].getName().endsWith(".jpeg")
                            || listFile[i].getName().endsWith(".gif"))

                    {
                        fileList.add(listFile[i]);

                    }



                    }

                }

            }

        return fileList;
    }
}

现在我想创建一个新类来进一步处理这个图像列表中的新操作 - 在新类中。

我的问题是:如何处理和声明fileList作为在其他类(新Java类)中使用的变量(Object)?我知道,在Java中没有像#34;全局变量&#34;这样的方法,但可以肯定的是有任何方法在应用程序中的其他地方(Class)使用脚本结果。

你能帮我解决一下我的问题吗?非常感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

如果新课程是指新的活动,那么您可以使用

传递数据
Intent intent = new Intent(getBaseContext(), NewClass.class);
intent.putExtra("imageList", fileList);
startActivity(intent);

但在此之前,您需要在当前班级中引用此列表

fileList = getfile(root);

但是,如果你只是意味着需要一个新的类进行处理。只需创建一个新类。定义一个带ArrayList<File>参数的构造函数/方法。从当前类创建一个新类的对象,将文件列表作为参数传递,并调用其中的方法以获得进一步的处理逻辑。

class ImagesProcessorClass {

  List<File> imageList;

  public ImagesProcessorClass (List<file> imageList) {
     this.imageList = imageList;
  }

  public void processsImages(){
    //do processing on imageList
   }

}

在你现在的课堂上做

public class SkanerActivity extends Activity {{

//your  present code

    protected void onCreate(Bundle savedInstanceState) {
     //your present code
     fileList = getfile(root);
      ImagesProcessorClass  imageProcessor = new ImagesProcessorClass (fileList);
       imageProcessor.processsImages();
     }


}

答案 1 :(得分:0)

使fileList成为该类的私有成员。然后添加访问器方法以从类外部访问它。您当然需要创建一个SkanerActivity对象来实现这一目标。

class SkanerActivity{
...
 private ArrayList<File> fileList = new ArrayList<File>();
 public getFileList(){
  return fileList;
 }
... 
} 

Class Access{

void function1(){
 SkanerActivity obj = new SkanerActivity();
 List fileList = obj.getFileList();
 ..
} 

答案 2 :(得分:0)

如果你想在另一个活动中使用它,你可以使用类似的东西

    Intent intent = new Intent(this, AnotherActivity.class);
    intent.putExtra("List", fileList);
    startActivity(intent); 

而在AnotherActivity中必须这样做

    Intent data = getIntent();
    List<File> files = (List<File>)data.getSerializableExtra("List");

此外,您可以将此列表设为静态并创建方法来获取它;