2013-05-05 75 views
0

如何從另一個名爲MainView的類中獲取填充DrawView類的矩形數組r []的元素?如何調用一個數組填充另一個類的元素?

我已經嘗試了幾種解決方案,但是我只能得到一個數組,填充DrawView類數組或nullpointer異常的最後一個元素。

E.g.下面的代碼,當我嘗試從DrawView中將數組導出到MainView(在循環中,r [i] = drawView.r [i])時,它會給出一個完全填充DrawView矩形數組的最後一個元素的數組。但我想導出到MainView完全相同的數組,我填寫在DrawView中。

任何想法我應該改變什麼?

public class DrawView extends View { 
    public Rect [] r = new Rect[81]; 
    Rect r2= new Rect(left, top, right, bottom); 
    int m=0; 
    @Override 
    public void onDraw(Canvas canvas) { 
    //...........some calculations of variables leftPosFirst etc.......// 
    int i=0; 
    while(i<9){ 
     int j=0; 
     while(j<9){   
      try{ 
       if(m<81){ 
        r2.left=leftPosFirst+1; 
        r2.top=(heightRect+heightRect*j)+1; 
        r2.right=rightPosFirst-1; 
        r2.bottom=(heightRect+heightRect*(j+1))-1; 
        r[m]=r2; 
        m++; 
       } 
      } catch (Exception ex){} 
      j++; 
     } 
     i++; 
    } 
    } 
} 

MainView.java類:

public class MainActivity extends Activity implements OnTouchListener{ 
    DrawView drawView; 
    int m=0; 
    Rect[] r = new Rect[81]; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    drawView = new DrawView(this); 
    setContentView(drawView); 
    drawView.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View arg0, MotionEvent arg1) { 
      switch (arg1.getAction()) { 
       case MotionEvent.ACTION_DOWN: { 
        int i; 
        for (i=0; i<81; i++) { 
         try{ 
         r[i] = drawView.r[i]; 
         System.out.println(r[i]); 
         } catch(Exception e){} 
        } 
        return true; 
       } 
      } 
      return false; 
     } 
    }); 
    } 
} 
+0

這不能與一個存取方法來實現? – christopher 2013-05-05 11:14:59

+0

改變你的凌亂'while'爲'for'首先...和'如果(m <81)'無用... – johnchen902 2013-05-05 11:28:07

+0

@ johnchen902不是沒用的...看看他是如何在'onDraw'中創建rect數組的,重置'm' ...沒有測試他會有'IndexOutOfBoundsException'。這麼醜陋:是的,但沒用:不:-) – 2013-05-05 11:29:48

回答

0

有一件事你應該很明白:對象是Java引用。也就是說,如果我寫了下面的代碼片段:

Rect r[] = new Rect[2]; 
Rect r2 = new Rect(0, 0, 1, 1); 
r[0] = r2; 
r2.right = 2; 
r[1] = r2; 

兩個r[0]r[1]指向同一個對象。因此,如果你做

System.out.println(r[0].right); 

你會看到打印2,而不是1

你需要做的是每次創建一個新對象,而不是修改同一個對象。

使用

if(m<81){ 
    r2 = new Rect(leftPosFirst+1, 
        heightRect+heightRect*j)+1, 
        rightPosFirst-1, 
        heightRect+heightRect*(j+1))-1); 
    r[m]=r2; 
    m++; 
} 
相關問題