java - 将上下文传递给辅助类方法时遇到问题

标签 java android android-activity android-toast

不完全确定我是否正确使用了这些术语(上下文、辅助类),如果我没有正确使用,请原谅。

无论如何,我的问题是我有一个类棋盘,它需要调用另一个类中的方法,这是“骑士”棋子的类。这个 Knight 类中的方法生成一个可能的移动列表,根据其在棋盘上的当前位置,该骑士可以采取这些移动。

一旦调用“possibleMoves”方法(位于 Knight 类中),我希望它生成一个将显示的 Toast。但是,我在使用要使用的上下文填充 Toast 时遇到问题。我不确定如何在调用时将棋盘的上下文传递给骑士类。

我希望这是有道理的。

我的代码如下 -

棋盘部分:

final ImageView s01 = (ImageView) findViewById(R.id.s01);
        s01.setClickable(true);
        s01.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    if (s01.getDrawable() != (null)) {
                        String Piece = s01.getTag().toString();

                        switch (Piece) {
                            case "black_knight":
                                knight blackKnight = new knight();
                                blackKnight.possibleMoves(0, 1);
                                break;

                        }

                        }


                    }
                });

骑士等级:

public class knight extends piece {
    static String chessBoard[][] = chessboard.chessBoard;
    //private static Context boardContext;
    @Override
    public String possibleMoves(int r, int c) {
        String list="", oldPieceRecord;

        for (int j=-1; j<=1; j+=2) {
            for (int k=-1; k<=1; k+=2) {
                try {
                    if (Character.isUpperCase(chessBoard[r+j][c+k*2].charAt(0)) || " ".equals(chessBoard[r+j][c+k*2])) {
                        oldPieceRecord=chessBoard[r+j][c+k*2];
                        chessBoard[r][c]=" ";
                        chessBoard[r+j][c+k*2]="k";
                        if (kingSafe()) {
                            list=list+r+c+(r+j)+(c+k*2)+oldPieceRecord+(oldPieceRecord.equals(" ") ? "": " ");
                        }
                        chessBoard[r][c]="k";
                        chessBoard[r+j][c+k*2]=oldPieceRecord;
                    }
                } catch (Exception e) {}
                try {
                    if (Character.isUpperCase(chessBoard[r+j*2][c+k].charAt(0)) || " ".equals(chessBoard[r+j*2][c+k])) {
                        oldPieceRecord=chessBoard[r+j*2][c+k];
                        chessBoard[r][c]=" ";
                        chessBoard[r+j*2][c+k]="k";
                        if (kingSafe()) {
                            list=list+r+c+(r+j*2)+(c+k)+oldPieceRecord;
                        }
                        chessBoard[r][c]="k";
                        chessBoard[r+j*2][c+k]=oldPieceRecord;
                    }
                } catch (Exception e) {}
            }
        }
        Toast.makeText( ,list, Toast.LENGTH_LONG).show();
        return list;
    }

我知道某些上下文指示符应该位于 Toast 中的逗号之前。

最佳答案

您可以在构造函数中要求一个 Context 对象:

private Context mContext;
public knight(Context context)
{
   mContext=context;
   super();
}
...
Toast.makeText(mContext ,list, Toast.LENGTH_LONG).show();

正如peace walker和codeMagic在评论中所说,你可以像这样实例化这个对象:

在 fragment 中:

knight blackKnight = new knight(getActivity());

在 Activity 中:

knight blackKnight = new knight(ChessboardActivity.this);

knight blackKnight = new knight(View.getContext());

关于java - 将上下文传递给辅助类方法时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28801667/

相关文章:

java - 按位不适用于 Java 中的 double

java - 按字符串中的第二个单词对 ArrayList 进行排序

java - SonarQube:无法读取 7.1.1-coverage.ec 以确定 JaCoCo 二进制格式

java - 如果单击后退按钮,如何登陆或导航到上一个 Activity

java - JEdi​​torPane 中 JScrollPane 长文本向下滚动

java - 我正在尝试掌握如何将界面从 android 转换为 Objective-C

java - 找不到 PreferenceScreen 类

Android + Sencha Touch 文字输入重复且难以脱焦

android - 将字符串从编辑文本传递到另一个 Activity

Android 在隐藏后在顶部显示 Activity 标题/状态栏