Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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 静态/非静态错误不确定如何以正确的方式解决此问题_Java_Android - Fatal编程技术网

Java 静态/非静态错误不确定如何以正确的方式解决此问题

Java 静态/非静态错误不确定如何以正确的方式解决此问题,java,android,Java,Android,我有一个图像适配器,它从instagram中获取图像并将其放入网格布局中。我想能够点击图像并将其放大到全屏 我看了一个类似的在线教程,对代码做了如下修改 我做了一个界面 public interface ImageClickListener{ void onClick(int position); } 我确保我的主要活动通过在顶部添加实现来实现这个接口,就像这样 public class MainActivity extends AppCompatActivity implement

我有一个图像适配器,它从instagram中获取图像并将其放入网格布局中。我想能够点击图像并将其放大到全屏

我看了一个类似的在线教程,对代码做了如下修改

我做了一个界面

public interface ImageClickListener{
     void onClick(int position);
}
我确保我的主要活动通过在顶部添加实现来实现这个接口,就像这样

public class MainActivity extends AppCompatActivity implements ImageClickListener
public class Holder extends RecyclerView.ViewHolder implements View.OnClickListener{

        private ImageView mPhoto1, mPhoto2;
        public Holder(View itemView) {
            super(itemView);

            mPhoto1 = (ImageView)itemView.findViewById(R.id.image1);
            //mPhoto2 = (ImageView)itemView.findViewById(R.id.image2);
        }

        @Override
        public void onClick(View v) {

            ImageClickListener.onClick(getLayoutPosition()); //*** problem here
        }
    }
最后,我对适配器中的holder类做了如下更改

public class MainActivity extends AppCompatActivity implements ImageClickListener
public class Holder extends RecyclerView.ViewHolder implements View.OnClickListener{

        private ImageView mPhoto1, mPhoto2;
        public Holder(View itemView) {
            super(itemView);

            mPhoto1 = (ImageView)itemView.findViewById(R.id.image1);
            //mPhoto2 = (ImageView)itemView.findViewById(R.id.image2);
        }

        @Override
        public void onClick(View v) {

            ImageClickListener.onClick(getLayoutPosition()); //*** problem here
        }
    }
问题很清楚,我不知道如何解决。。。我以为我会做一些像


imageclicklistener侦听器=新建图像单击。。。在支架上如此等等,但效果不太好。当我在界面中使用onclick方法时,我显然不能在我的主界面中使用它

您的
main活动
就是您想要充当
ImageClickListener的活动
。您可以在创建客户适配器时将其作为参数传递给构造函数,然后保留对它的引用

public class MyAdapter extends RecyclerView.Adapter<Holder> {
    private ImageClickListener imageClickListener;
    public MyAdapter(ImageClickListener imageClickListener, other params...) {
        this.imageClickListener = imageClickListener;
        ...
    }
    ...
}
MainActivity
中创建适配器的地方,它将如下所示:

private MyAdapter myAdapter; // class field

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    // this refers to the MainActivity being passed in as the ImageClickListener
    myAdapter = new MyAdapter(this, restOfArgs...);
    ...
}

你需要一个
ImageClickListener
的实例来调用
onClick
方法。是的,我意识到了这一点,但我不知道该在哪里做……我也尝试了这个方法,但没有解决我的问题。下面是我所做的更改…我在适配器中创建了一个新的imgclicklistener,并将其传递到构造函数中进行设置。在顶部的main中,我还定义了一个新的imageclicklistener,随后对其进行了初始化。它没有给出任何错误,但没有按预期工作。当我点击图片时,它们并没有全屏显示。public void onClick(int位置){Picture selectedPicture=mAdapter.getSelectedPicture(位置);Intent Intent=newintent(MainActivity.this,DetailedActivity.class);Intent.putExtra(“key”,selectedPicture);startActivity(Intent);}关于定义/初始化新的
ImageClickListener
,您所说的有些愚蠢。您不需要声明一个,因为
main活动
是您的
ImageClickListener
。请确保您声明的适配器与我在更新答案中声明的适配器类似,当然除了使用您的适配器类名。除了最后一个,我进行了更改,它给了我一个错误,很抱歉我弄糊涂了,但我不明白当适配器构造函数正在寻找imageclicklistener时,如何将主活动作为引用传递?除了最后一部分,我想我一步一步地跟着你。你可以将实现
ImageClickListener
的任何东西传递到构造函数中。由于您的
main活动
在您提供的代码中实现了
ImageClickListener
,因此您可以将其作为适配器构造函数的引用传入
Main活动是一个
ImageClickListener
。如果仍然无法工作,请在创建适配器的
MainActivity
中添加新的相关代码,甚至可以添加适配器代码。