[英]Can not change the image of Imageview from another class
我有一個MainActivity,其中編寫了大部分代碼。 我在activity_main.xml中有一個imageview,它在Mainactivity中設置為默認圖像。
我的另一個文件“ OnSwipeTouchListener”正在偵聽滑動和雙擊事件,我編寫了代碼以在用戶雙擊時更改imageview的圖像,但是我的代碼不起作用,也沒有給出任何錯誤。 (我正在使用Layoutinflater來為activity_main文件充氣)。
這是OnSwipeTouchListener
package com.backspace.memebook; import android.content.Context; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; public class OnSwipeTouchListener extends MainActivity implements OnTouchListener { private final GestureDetector gestureDetector; public Context ctx; public OnSwipeTouchListener (Context ctx){ gestureDetector = new GestureDetector(ctx, new GestureListener()); this.ctx = ctx; } @Override public boolean onTouch(View v, MotionEvent event) { return gestureDetector.onTouchEvent(event); } private final class GestureListener extends SimpleOnGestureListener { private static final int SWIPE_THRESHOLD = 100; private static final int SWIPE_VELOCITY_THRESHOLD = 100; @Override public boolean onDown(MotionEvent e) { return true; } @Override public boolean onDoubleTap(MotionEvent e) { System.out.println("double tap"); LayoutInflater mInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = mInflater.inflate(R.layout.activity_main, null); ImageView isFunny = (ImageView) view.findViewById(R.id.isFunny); isFunny.setImageResource(R.drawable.funny); return super.onDoubleTap(e); } } }
Mainactivity沒有太多代碼,它只是設置了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);
}
}
}
您可能希望將引用傳遞給GestureListener的構造函數中的ImageView,而不是從OnSwipeTouchListener訪問數據
您再次在活動中不存在的視圖中擴大了布局。 您應該在setContentView之后在onCreate內使用findViewById並在onDoubleTap()中更改ImageView背景。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.