繁体   English   中英

无法将上下文传递给助手类方法

[英]Trouble passing context to helper class method

不能完全确定我是否正确使用了这些术语(上下文,帮助程序类),请原谅我。

无论如何,我的问题是我有一个类棋盘,需要在另一个类中调用一个方法,这就是“骑士”棋子的类。 骑士类中的方法会生成一个列表,列出骑士在当前棋盘上的当前位置可能做出的动作。

一旦调用了“ 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在评论中所说,您可以像这样实例化该对象:

在片段中:

knight blackKnight = new knight(getActivity());

在活动中:

knight blackKnight = new knight(ChessboardActivity.this);

要么

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

希望我能帮到你(我不会英语)。 您可以像这样创建knight类的构造函数。

 public class knight extends piece {
static String chessBoard[][] = chessboard.chessBoard;
private Context mContext;
public knight(Context mContext){
    this.mContext = mContext;       
}
// your code

}

和:

knight blackKnight = new knight(yourContext);

现在,您可以在课程中使用上下文了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM