有 Java 编程相关的问题?

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

java与ImageButtons协调问题

我正在编写一个安卓应用程序/游戏,允许用户购买带有拖放图像按钮的建筑(实现拖放api)。当用户拖动建筑物时,坐标会立即存储在sqlite数据库中

假设用户购买了两栋建筑:第一栋是colonyHut,第二栋是homeHut。然后,用户将两栋建筑放置在他们希望的任何地方,从而保存建筑的坐标。问题在于应用程序关闭后再次打开。每当应用程序加载备份时,之前留下的第二栋建筑(homeHut)现在将成为第一栋建筑(colonyHut)的所在地

我一直在与这个问题作斗争,我不确定为什么第一栋楼会在第二栋楼被移动时继续使用第二栋楼的坐标

这是我检查这两栋建筑之前是否购买过的代码。如果有,它们将被动态创建并插入到视图中

    newHomeHutOneID = prefs.getInt("NewHomeHutOne", 0);
    if (newHomeHutOneID != 0)
    {
        data.open();
        homeHutOneX = data.getHomeHutOneX();
        homeHutOneY = data.getHomeHutOneY();
        data.close();
        newHomeHutFrame = (FrameLayout) findViewById(R.id.bottomHalf);
        newHomeHutOne = new ImageButton(getApplicationContext());
        newHomeHutOne.setBackgroundResource(R.drawable.homehut);
        newHomeHutOne.setTag("NewHomeHutOne");
        if (homeHutOneX == 0 && homeHutOneY == 0)
        {
            newHomeHutOne.setX(250);
            newHomeHutOne.setY(250);
        }//end if
        else
        {
            newHomeHutOne.setX(homeHutOneX - (newHomeHutOne.getWidth()/2));
            newHomeHutOne.setY(homeHutOneY - (newHomeHutOne.getHeight()/2));
        }//end else
        newHomeHutOne.setOnTouchListener(new BuildingsClick());
        findViewById(R.id.topHalf).setOnDragListener(new HomeHutDrag(getApplicationContext(), 1));
        findViewById(R.id.bottomHalf).setOnDragListener(new HomeHutDrag(getApplicationContext(), 1));
        FrameLayout.LayoutParams  param1 = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
        newHomeHutFrame.addView(newHomeHutOne, param1);
    }//end if

    newColonyHutOneID = prefs.getInt("NewColonyHutOne", 0);
    if (newColonyHutOneID != 0)
    {
        data.open();
        colonyHutOneX = data.getColonyHutOneX();
        colonyHutOneY = data.getColonyHutOneY();
        data.close();
        newColonyHutFrame = (FrameLayout) findViewById(R.id.bottomHalf);
        newColonyHutOne = new ImageButton(getApplicationContext());
        newColonyHutOne.setBackgroundResource(R.drawable.colonyhut);
        newColonyHutOne.setTag("NewColonyHutOne");
        Toast.makeText(getApplicationContext(), "colonyHutOne x: " + colonyHutOneX + " y: " + colonyHutOneY, Toast.LENGTH_SHORT).show();
        if (colonyHutOneX == 0 && colonyHutOneY == 0)
        {
            newColonyHutOne.setX(250);
            newColonyHutOne.setY(250);
        }//end if
        else
        {
            newColonyHutOne.setX(colonyHutOneX - (newColonyHutOne.getWidth()/2));
            newColonyHutOne.setY(colonyHutOneY - (newColonyHutOne.getHeight()/2));
        }//end else
        newColonyHutOne.setOnTouchListener(new BuildingsClick());
        findViewById(R.id.topHalf).setOnDragListener(new ColonyHutDrag(getApplicationContext(), 1));
        findViewById(R.id.bottomHalf).setOnDragListener(new ColonyHutDrag(getApplicationContext(), 1));
        FrameLayout.LayoutParams  param1 = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
        newColonyHutFrame.addView(newColonyHutOne, param1);
    }//end if

我已经检查了数据库,我可以看到坐标被正确保存,并且被保存为正确的imageButton,所以我不知道为什么会继续发生这种情况

如果你认为你需要更多信息,请告诉我。我迷路了,我真的需要任何想法

我很感激任何可能的帮助。谢谢大家


共 (1) 个答案

  1. # 1 楼答案

    当我意识到我不能为每个拖放式建筑使用单独的OnDragListener时,这个问题就解决了。只能使用一个onDragListener,然后我设置了一种不同的方法来识别正在拖动的建筑,以便为正确的建筑保存坐标