0

私は現在、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
}
4

3 に答える 3

1

this2 番目のケースでは のインスタンスであるため、完全に修飾するか、まったくOnClickListener削除する必要があります。たとえば、次のようになります。this

EnclosingClass.this.dataBase.get(0);

また

dataBase.get(0);

Java の命名規則に合わせて、変数名を小文字で始めたことに注意してください。

于 2012-04-05T19:15:32.503 に答える