[英]Using the same 'OnClickListener' in different Activities
我正在定义和使用一个自定义的OnClickListener (即MyOnClickListener
),此片段在我当前正在使用的Fragment文件中。
继续编写代码,我意识到在另一个恰好在另一个Activity中的 Fragment中, 我也需要相同的侦听器 。
因此,我创建了文件MyOnClickListener.java
复制之前在第一个Fragment中使用的所有代码,但是现在出现以下错误:
无法解析方法“ getActivity()”
无法解析方法“ getResources()”
注意:我在stackoverflow上读到,一种解决方案可能只是编写MainActivity.this
来代替getActivity()
,但是在我的情况下,我需要在两个不同的活动中使用相同的方法。 我该怎么办?
编辑:这是MyOnClickListener
的代码, MyOnClickListener
需要显示一个图标矩阵:
class MyOnClickListener implements View.OnClickListener {
private LabeledButton labeledButton;
MyOnClickListener(LabeledButton labeledButton) {
super();
this.labeledButton = labeledButton;
}
@Override
public void onClick(View view) {
Button iconButton = (Button) view;
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); // ERROR HERE
LayoutInflater layoutInflater = getActivity().getLayoutInflater(); // ERROR HERE
final View viewLayout = layoutInflater.inflate(R.layout.dialog_matrix_icons, null);
builder.setView(viewLayout);
builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Do nothing
}
});
final AlertDialog alertDialog = builder.create();
// Set-up listeners of icon button
Button imageButtons[][] = new Button[3][3];
int i;
int j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
Resources res = getResources(); // ERROR HERE
TypedArray icons = res.obtainTypedArray(R.array.listIcon);
int idDrawable = icons.getResourceId(i + 3 * j, 1); // ERROR HERE
icons.recycle();
LinearLayout grid = (LinearLayout) viewLayout;
LinearLayout row = (LinearLayout) grid.getChildAt(i);
imageButtons[i][j] = (Button) row.getChildAt(j); // Retrieve the right image in the grid
imageButtons[i][j].setBackgroundResource(idDrawable);
String nameIcon = getResources().getResourceEntryName(idDrawable); // ERROR HERE
ImageOnClickListener imageOnClickListener = new ImageOnClickListener(iconButton, alertDialog, idDrawable, nameIcon, labeledButton);
imageButtons[i][j].setOnClickListener(imageOnClickListener);
}
}
alertDialog.show();
}
}
用您的构造函数替换
MyOnClickListener(LabeledButton labeledButton,Context context) {
super();
this.labeledButton = labeledButton;
this.context = context;
}
如果没有,请确保在MyOnClickListenerClass内创建上下文变量,否则将在构造函数行发现错误。然后可以将所有getActivity()
替换为context
。
初始化MyOnClickListener
时,请确保传递context参数
为您的充气机使用
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)
我在stackoverflow上读到,一种解决方案可能只是编写MainActivity.this来代替getActivity(),但是在我的情况下,我需要在两个不同的活动中使用相同的方法。 我该怎么办?
如果将OnClickListener放在自己的编译单元中,则不能使用在Stackoverflow上阅读过的东西 。 MainActivity.this
,指的是一个具体的和当前实例MainActivity
(拜托,看看它是什么关键字this
手段在Java)。 如果需要上下文,可以在onClick
回调View view
中获取的参数进行检索。 在这里阅读更多
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.