无法将上下文传递给辅助 class 方法
Trouble passing context to helper class method
不完全确定我是否正确使用了这些术语(上下文、助手 class),如果我不正确,请原谅。
无论如何,我的问题是我有一个 class 棋盘需要调用另一个 class 中的方法,这是 'knight' 棋子的 class .这个马 class 中的方法生成了一个列表,其中列出了马在给定其在棋盘上的当前位置后可能采取的行动。
调用'possibleMoves'方法(位于骑士class中)后,我希望它生成一个将要显示的Toast。但是,我无法使用要使用的上下文来填充 Toast。我不确定如何在调用时将棋盘的上下文传递给骑士class。
我希望这是有道理的。
我的代码如下 -
棋盘部分:
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;
}
}
}
});
骑士class:
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());
在 Activity 中:
knight blackKnight = new knight(ChessboardActivity.this);
或
knight blackKnight = new knight(View.getContext());
希望我能帮到你(我不懂英语)。
您可以像这样创建 class 骑士的构造函数。
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);
现在您可以在 class 中使用上下文。
不完全确定我是否正确使用了这些术语(上下文、助手 class),如果我不正确,请原谅。
无论如何,我的问题是我有一个 class 棋盘需要调用另一个 class 中的方法,这是 'knight' 棋子的 class .这个马 class 中的方法生成了一个列表,其中列出了马在给定其在棋盘上的当前位置后可能采取的行动。
调用'possibleMoves'方法(位于骑士class中)后,我希望它生成一个将要显示的Toast。但是,我无法使用要使用的上下文来填充 Toast。我不确定如何在调用时将棋盘的上下文传递给骑士class。
我希望这是有道理的。
我的代码如下 -
棋盘部分:
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;
}
}
}
});
骑士class:
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());
在 Activity 中:
knight blackKnight = new knight(ChessboardActivity.this);
或
knight blackKnight = new knight(View.getContext());
希望我能帮到你(我不懂英语)。 您可以像这样创建 class 骑士的构造函数。
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);
现在您可以在 class 中使用上下文。