簡體   English   中英

無法從其他類更改Imageview的圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM