gpt4 book ai didi

java - 类之间的Android消息

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:00:34 24 4
gpt4 key购买 nike

这是我的第一篇文章,我没有发现任何类似的东西,所以我决定问一下。

我正在为 Android 开发一个扑克游戏来练习 SDK 并刷新/改进我的 Java。这是一个简单的应用程序,可以控制德州扑克手牌。

最初,我只使用 Java SE 编写我的类,它看起来不错。每个类都有自己的目的并使用控制台输入/输出对其进行测试,我可以看到它确实有效:)

上周,我决定将它移植到 Android 以通过图形界面查看发生的事情,所以我获得了资源图像,制作了一个 Activity 并包含了我的扑克包。

在移植到 Android 之前,我可以放置一个 println(或 readLine)来查看发生了什么并发送我的输入。现在我陷入了每个类如何与游戏 Activity 进行通信以提供必须绘制的内容。如果可能的话,我不想在游戏类中插入 Android 绘图代码。我正在尝试找到一种在我的 Activity 和游戏类之间交换消息的方法,我喜欢一些建议。我是开发 Android 应用程序的新手,所以我不知道执行此操作的所有机制。

以下是我的 Activity fragment :

package my.poker.game;

//import stuff

public class ActivityHand extends Activity
{
private static Vector<Player> Players = new Vector<Player>();
public static final int MAX_PLAYERS = 8;

public static void startEmptyTable()
{
Players.removeAllElements();
Players.setSize(MAX_PLAYERS);
}

public static void LeaveTable(int pos)
{
Players.set(pos, null);
}

public static void SitTable(int pos, Player player)
{
Players.set(pos, player);
}

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

int cash = 1000;

startEmptyTable();

SitTable(0, new Jogador("William", cash));
SitTable(2, new Jogador("Richard", cash));
SitTable(4, new Jogador("John", cash));
SitTable(6, new Jogador("Paul", cash));
SitTable(8, new Jogador("Albert", cash));

//Start a Hand.... in future this will be a loop for each Hand
Hand hand = new Hand(Players);
}
}

对象手牌,将选择一个庄家,发牌,控制大小盲注并开始游戏循环。

问题是:hand 类如何告诉 Activity 进行绘制并传递包含要绘制的内容的对象?

非常感谢您的帮助


编辑:我决定尝试使用 Handler 实现它并传递简单的消息。正如我从 Handler at Developers 中读到的那样一个 Handler 对象被分配给线程的 MessageQueue,所以我试图将它放入我的 Activity 类中(在 Hand hand = new Hand (...) 之前):

Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{

Bundle bundle = msg.getData();

// Do something with message contents
}
};

在 Hand 类中,当我想画一些东西时,我会把它放在:

Handler handler = new Handler();
Message msg = new Message();
Bundle bundle = new Bundle();

bundle.putString("Key", "The Key's Value");
msg.setData(bundle);
handler.sendMessage(msg);

据我了解,两个处理程序都来自同一个线程,所以它们被分配给同一个 MessageQueue,对吗?我想当我在 Hand 类中发送一条消息时,Activity 类可以在 handleMessage 方法中接收它并处理我发送的任何消息,但 handleMessage 不会执行。

我错过了什么?

再次感谢

最佳答案

要调用 Activity 中的方法,您需要将 Activity 传递给此类。

例如:

    public class PokerActivity extends Activity
{

@Override
public void onCreate(Bundle savedInstanceState)
{
Hand hand = new Hand(this);
}

public void setVisibleHand(Player player)
{
<do something in the activity>
}

}

public class Hand
{
PokerActivity pokerActivity;
public Hand(PokerActivity activity)
{
this.pokerActivity = activity;
}

public void setVisibleHand()
{
pokerActivity.setVisibleHand(player1);
}
}

现在,这可能不是最好的方法。在 Android 中,你必须小心不要泄漏上下文,否则你可能会遇到内存问题。 (简单地传递 Activity/上下文可能是最简单的方法,但也是泄漏上下文的最简单方法。)

我建议您先看一些简单的教程,以了解 Android Activity 的工作原理。

关于java - 类之间的Android消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12937109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com