Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.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 无法从其他类更改Imageview的图像_Java_Android_Imageview_Android Imageview_Layout Inflater - Fatal编程技术网

Java 无法从其他类更改Imageview的图像

Java 无法从其他类更改Imageview的图像,java,android,imageview,android-imageview,layout-inflater,Java,Android,Imageview,Android Imageview,Layout Inflater,我有一个main活动,其中大部分代码都是编写的。我的activity_main.xml中有一个imageview,我正在将其设置为Mainactivity中的默认图像 我的另一个文件“OnSwipeTouchListener”正在侦听滑动和双击事件,我编写了代码,在用户双击时更改imageview的图像,但我的代码不起作用,也没有给出任何错误。(我正在使用Layoutinflater对活动\ u主文件进行充气) 这是你的听众 package com.backspace.memebook; 导入

我有一个main活动,其中大部分代码都是编写的。我的activity_main.xml中有一个imageview,我正在将其设置为Mainactivity中的默认图像

我的另一个文件“OnSwipeTouchListener”正在侦听滑动和双击事件,我编写了代码,在用户双击时更改imageview的图像,但我的代码不起作用,也没有给出任何错误。(我正在使用Layoutinflater对活动\ u主文件进行充气)

这是你的听众

package com.backspace.memebook;
导入android.content.Context;
导入android.view.GestureDetector;
导入android.view.GestureDetector.SimpleOnGestureListener;
导入android.view.LayoutInflater;
导入android.view.MotionEvent;
导入android.view.view;
导入android.view.view.OnTouchListener;
导入android.widget.ImageView;
公共类OnSwipeTouchListener扩展了MainActivity实现OnTouchListener{
私人最终手势检测器手势检测器;
公共环境ctx;
公共OnSwipeTouchListener(上下文ctx){
gestureDetector=新的gestureDetector(ctx,new GestureListener());
this.ctx=ctx;
}
@凌驾
公共布尔onTouch(视图v,运动事件){
返回gestureDetector.onTouchEvent(事件);
}
私有最终类GestureListener扩展了SimpleOnGestureListener{
专用静态最终整数滑动\u阈值=100;
专用静态最终整数滑动速度阈值=100;
@凌驾
公共布尔onDown(运动事件e){
返回true;
}
@凌驾
公共布尔onDoubleTap(运动事件e){
System.out.println(“双击”);
LayoutInflater mInflater=(LayoutInflater)ctx.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
视图=mInflater.flate(R.layout.activity\u main,空);
ImageView isfuncy=(ImageView)view.findViewById(R.id.isfuncy);
isfuncy.setImageResource(R.drawable.funcy);
返回super.onDoubleTap(e);
}
}

}
您正在活动中不存在的视图中再次膨胀布局。在设置ContentView之后,应在onCreate内使用findViewById,并在onDoubleTap()内更改ImageView背景。

在注释中写入时,需要在活动中放大视图。类似的东西应该可以用(未经测试)


您可能希望在GestureListener的构造函数中传递对ImageView的引用,而不是从OnSwipeTouchListener访问数据

您需要在MainActivity中膨胀并存储对视图的引用。意思是:onCreate()存储可从GestureListener访问的视图。
在onCreate中使用findViewById
。也可以在onDoubleTab()中完成。@greenapps是的,但不是最佳做法,因为如果在onCreate中使用findViewById,则会执行一次,如果在onDoubleTap()中使用findViewById,则每次用户点击imageview时都会执行。
public class MainActivity extends Activity { 
public ImageView iv = null;
public void onCreate(....) {
    setContentView( ... ); 
    iv = findViewById(....);
}

public class OnSwipeTouchListener extends MainActivity implements OnTouchListener {
    //public ImageView iv from MainActivity
    public OnSwipeTouchListener (Context ctx){
        gestureDetector = new GestureDetector(ctx, new GestureListener());
    }

    private final class GestureListener extends SimpleOnGestureListener {

        private static final int SWIPE_THRESHOLD = 100;
        private static final int SWIPE_VELOCITY_THRESHOLD = 100;

        @Override
        public boolean onDoubleTap(MotionEvent e) {
            iv.setImageResource(R.drawable.funny); //iv is accessable, you may also use a constructor to pass the reference.
            return super.onDoubleTap(e);
        }
    }
}