我在我目前使用的片段文件中定义并使用自定义OnClickListener (即MyOnClickListener
)。
保持编写代码我意识到我在另一个片段中也需要相同的侦听器,恰好在另一个Activity 中。
因此我创建了文件MyOnClickListener.java
复制我之前在第一个片段中使用的所有代码,但现在我收到以下错误:
无法解决方法' getActivity()'
无法解决方法' getResources()'
注意:我在 stackoverflow 上读到一个解决方案可能只是写MainActivity.this
来代替getActivity()
,但在我的情况下我需要在两个不同的活动。我该怎么办?
编辑:这是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();
}
}
答案 0 :(得分:2)
将其替换为构造函数
@echo off
set "LogFile=%TEMP%\%~n0.tmp"
del "%LogFile%" 2>nul
>>"%LogFile%" echo test
rem Other commands with output also redirected to log file.
if exist "%LogFile%" (
rem copy "%LogFile%" "%~dp0log.txt"
copy /B "%~dp0log.txt"+"%LogFile%" "%~dp0log.txt"
del "%LogFile%"
) >nul 2>&1
set "LogFile="
确保在MyOnClickListenerClass中创建上下文变量,否则您将在构造函数行中找到错误。然后您可以将所有MyOnClickListener(LabeledButton labeledButton,Context context) {
super();
this.labeledButton = labeledButton;
this.context = context;
}
替换为getActivity()
。
初始化context
时,请确保传递上下文参数
对于你的inflater使用这个
MyOnClickListener
答案 1 :(得分:0)
我在stackoverflow上读到一个解决方案可能只是写作 MainActivity.this代替getActivity(),但在我的情况下我 需要在两个不同的活动中使用相同的。我该怎么办?
如果将OnClickListener放在自己的编译统一中,则不能使用在Stackoverflow上读取的whawt 。 MainActivity.this
,指的是MainActivity
的具体和当前实例(请查看关键字this
在java中的含义)。如果您需要上下文,则可以使用onClick
callaback View view
中的参数来检索它。阅读更多here