Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用相同的';OnClickListener';在不同的活动中_Java_Android_Android Fragments_Onclicklistener - Fatal编程技术网

Java 使用相同的';OnClickListener';在不同的活动中

Java 使用相同的';OnClickListener';在不同的活动中,java,android,android-fragments,onclicklistener,Java,Android,Android Fragments,Onclicklistener,我当时正在使用的片段文件中定义并使用一个自定义OnClickListener(即MyOnClickListener) 继续写代码,我意识到我还需要另一个片段中的同一个侦听器,而另一个片段恰好也在另一个活动中 因此,我创建了文件MyOnClickListener.java,复制了我在前面的第一个片段中使用的所有代码,但现在我得到了以下错误: 无法解析方法“getActivity()” 无法解析方法“getResources()” 注意:我在stackoverflow上读到一个解决方案可能只是编写M

我当时正在使用的片段文件中定义并使用一个自定义OnClickListener(即
MyOnClickListener

继续写代码,我意识到我还需要另一个片段中的同一个侦听器,而另一个片段恰好也在另一个活动中

因此,我创建了文件
MyOnClickListener.java
,复制了我在前面的第一个片段中使用的所有代码,但现在我得到了以下错误:

无法解析方法“getActivity()”

无法解析方法“getResources()”

注意:我在stackoverflow上读到一个解决方案可能只是编写
MainActivity。这个
代替了
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();
}
类MyOnClickListener实现View.OnClickListener{
私人标签按钮标签按钮;
MyOnClickListener(标签按钮标签按钮){
超级();
this.labeledButton=labeledButton;
}
@凌驾
公共void onClick(视图){
按钮图标按钮=(按钮)视图;
AlertDialog.Builder=新建AlertDialog.Builder(getActivity());//此处出错
LayoutFlater LayoutFlater=getActivity().GetLayoutFlater();//此处出错
最终视图viewLayout=LAYOUTINGER.FLATE(R.layout.dialog\u矩阵\u图标,空);
builder.setView(视图布局);
setNegativeButton(android.R.string.cancel,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
//无所事事
}
});
final AlertDialog AlertDialog=builder.create();
//设置图标按钮的侦听器
按钮图像按钮[][]=新按钮[3][3];
int i;
int j;
对于(i=0;i<3;i++){
对于(j=0;j<3;j++){
Resources res=getResources();//此处出错
TypedArray图标=res.obtainTypedArray(R.array.listIcon);
int-idDrawable=icons.getResourceId(i+3*j,1);//此处出错
icons.recycle();
LinearLayout栅格=(LinearLayout)视图布局;
LinearLayout行=(LinearLayout)grid.getChildAt(i);
imageButtons[i][j]=(按钮)行。getChildAt(j);//检索网格中的右图像
imageButtons[i][j].setBackgroundResource(idDrawable);
字符串名称图标=getResources().getResourceEntryName(idDrawable);//此处出错
ImageOnClickListener ImageOnClickListener=新的ImageOnClickListener(图标按钮、警报对话框、idDrawable、名称图标、标签按钮);
imageButtons[i][j].setOnClickListener(imageOnClickListener);
}
}
alertDialog.show();
}
}

我在stackoverflow上读到一个解决方案可能只是写 MainActivity.this代替了getActivity(),但在我的情况下 需要在两种不同的活动中使用相同的方法。我该怎么办


如果将OnClickListener放在它自己的编译统一体中,则不能使用在Stackoverflow上读取的内容
MainActivity。此
,指的是
MainActivity
的一个具体且当前的实例(请查找关键字
在java中的含义)。如果需要上下文,可以单击
onClick
callaback,
View视图
中获取的参数来检索它。阅读更多内容

将其替换为构造函数

MyOnClickListener(LabeledButton labeledButton,Context context) {
   super();
   this.labeledButton = labeledButton;
   this.context = context;
}
确保在MyOnClickListenerClass内创建上下文变量,否则会在构造函数行中发现错误。然后可以将所有
getActivity()
替换为
context

初始化
MyOnClickListener
时,请确保传递上下文参数

对于你的充气机,使用这个

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

显示您的代码please@IntelliJAmiya完成!谢谢,除了这里,它在任何地方都能正常工作:
LayoutInflater LayoutInflater=context.getLayoutInflater()。我做错了什么?请参阅更新代码。因为您的片段通常已经通过使用context.getLayourInflater拥有了自己的充气器,所以您不需要初始化充气器,但当前您使用的是单独的类,您需要初始化充气器才能使其工作。