单击android应用程序后访问ArrayList

时间:2012-04-05 19:13:26

标签: java android arraylist onclicklistener

我目前正在尝试在Android中创建一个3D游戏,而我正在努力解决一些问题。

在点击我游戏中的方向按钮后的某个时刻,我尝试访问一个ArrayList,但似乎我的ArrayList(之前填充的)现在是空的。

这是一个线程问题吗?

@Override 
public void Update(ArrayList<ArrayList<IModel>> Database) {
    this.DataBase = Database;
    System.out.println("---> " + this.DataBase.get(0));  //WORKING                             
}


Button up_btn = (Button) findViewById(R.joystick.up);
up_btn.setOnClickListener(new View.OnClickListener() {
    @Override public void onClick(View v) {
        System.out.println("--------->" + DataBase.get(0)); //NOT WORKING   
    }
});

这是我的整个代码;

 public class PlayerController extends Activity implements IController
 {
//Properties

private ArrayList<ArrayList<IModel>> DataBase = null;
private GLSurfaceView mGLView;

//Virtual

@Override public void Update(ArrayList<ArrayList<IModel>> Database)
{
    this.DataBase = Database;
    System.out.println("---> " + this.DataBase.get(0));                             //WORKING
}

@Override protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    this.mGLView = new MySurfaceView(this);

    LayoutInflater inflater = getLayoutInflater();
    this.getWindow().addContentView(this.mGLView, new ViewGroup
            .LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
            ViewGroup.LayoutParams.FILL_PARENT));
    this.getWindow().addContentView(inflater.inflate(R.layout.footer, null), new ViewGroup
            .LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
            ViewGroup.LayoutParams.FILL_PARENT));
    this.getWindow().addContentView(inflater.inflate(R.layout.play, null), new ViewGroup
            .LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, (int)80));

    //Joystick buttons

    Button up_btn = (Button) findViewById(R.joystick.up);
    up_btn.setOnClickListener(new View.OnClickListener()
    {
        @Override public void onClick(View v)
        {
            System.out.println(">>>>>" + DataBase.get(0));           //NOT WORKING..
            //UpMotionListener();
        }
    });

}

@Override protected void onPause()
{
    super.onPause();
    mGLView.onPause();
}

@Override protected void onResume()
{
    super.onResume();
    mGLView.onResume();
}

public void UpMotionListener()
{
    //System.out.println(">>>>>>>>>" + DataBase.get(0));                //NOT WORKING
}

3 个答案:

答案 0 :(得分:1)

第二种情况下的

thisOnClickListener的实例,因此您需要完全限定它,或者完全删除this,例如:

EnclosingClass.this.dataBase.get(0);

dataBase.get(0);

请注意,我使用小写启动变量名称,以匹配Java的命名约定。

答案 1 :(得分:0)

嗯,真的,你的问题是你不懂Java语言,但这是可以修复的。以下是您缺少的具体知识的简要概述:http://www.oursland.net/tutorials/java/innerclasses/

现在,直接回答你的问题:

尝试在没有“this”的情况下引用数据库。在它面前。

新的View.OnClickListener()中的this.DataBase.get(0)指的是当您说新的OnClickListener时创建的匿名内部类,而不是您创建数据库成员的实例类。 当你使用“this”时,你会说这个类,因为它在你的监听器里面,它指的是内联创建的类,而“Database”成员变量超出了范围。

答案 2 :(得分:0)

可能是在调用Update和onClick之间调整/清除ArrayList的其他内容吗?