2010-11-12 27 views
0

class1.java創建了class2.java中需要的float []數組。你怎麼做到這一點?浮點[]是點。下面是一個例子代碼:如何在android中的活動之間傳遞一個float []數組?

class1.java 

    import android.app.Activity; 
    import android.content.Context; 
    import android.app.ListActivity; 
    import android.content.Intent; 
    import android.graphics.Canvas; 
    import android.graphics.Color; 
    import android.graphics.Paint; 
    import android.graphics.Typeface; 
    import android.view.Display; 
    import android.view.SurfaceHolder; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.AdapterView; 
    import android.widget.ArrayAdapter; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.Spinner; 
    import android.widget.TextView; 

    public class class1 extends Activity implements OnClickListener { 
      public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      float[] points = new float[100]; 
      } 
    } 


class2.java 



import android.app.Activity; 
    import android.app.ListActivity; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.graphics.Canvas; 
    import android.graphics.Color; 
    import android.graphics.DashPathEffect; 
    import android.graphics.Paint; 
    import android.graphics.Path; 
    import android.graphics.Rect; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.AdapterView; 
    import android.widget.ArrayAdapter; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.Spinner; 
    import android.widget.TextView; 

    public class graph extends Activity{ 

    DemoView demoview; 
    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      demoview = new DemoView(this); 
      setContentView(demoview); 

    } 
    private class DemoView extends View{ 
     public DemoView(Context context){ 
     super(context); 
     } 

     @Override protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     canvas.drawLines(points, paint); 

     } 
    } 
    } 
+0

重新加標籤的語言和參數傳遞更接近什麼其他的結構問題在於什麼。 – Flexo 2010-11-12 16:41:21

+0

如果您將其重新標記爲java,那麼您可能會破壞它。這是一個非常Android的問題。 – Falmarri 2010-11-12 17:06:18

+0

@Falmarri:在OP的問題和代碼中擴展名是.JAVA。 – 2010-11-12 17:32:14

回答

1

如果我正確理解你的問題,有兩個(或許更多)方法:

1)通過了float[]中的Class2的構造函數。 (給定你的代碼,這可能不是最好的方法。)

2)在class2中創建一個方法setMyFloatArray(float[] arr),在class1中創建一個getMyFloatArray()方法。在程序中實例化class1和class2之後,使用get方法作爲參數調用set方法。

+0

這些都不會在Android – Falmarri 2010-11-12 17:05:26

2

看起來這比第一次出現更困難,因爲它不是一個java問題,而是一個android問題。有關更多信息,請參見here

+0

工作這不會在Android – Falmarri 2010-11-12 17:05:55

+0

@Falmarri工作 - 如果這不起作用,會有什麼? (注意 - 我用更多的android特定指針編輯了我的答案) – KevinDTimm 2010-11-12 17:13:22

+0

您在編輯中的鏈接確實包含正確的答案。您之前擁有的部分在Android設置中確實沒有任何意義。 – 2010-11-12 18:00:31

0

如果將要使用全局單例式數據,那麼您可以在全局單例式中傳遞數據。

public class YourApplication extends Application 
{  
    public float[] points = new float[100]; 
} 

然後通過調用它的任何活動:

YourApplication appState = ((YourApplication)this.getApplication()); 
appState.points = new float[100]; // Do whatever you need to with the points here. 
+0

真的嗎?一個公共的全局變量?這似乎是一個非常糟糕的主意。至少你應該使用一個getter,以防你有一天想把這個數組改成列表或其他東西。 – 2010-11-12 18:38:54

+0

@Mayra這只是一個如何訪問全球單身人士的例子,其實施取決於讀者。爲了可讀性,我濃縮了它。最好將類設置爲具有yes,accessor和setter的全局對象。有關更清晰的示例,請參閱我的博客帖子,標題爲「Global Singletons」http://www.bryandenny.com/index.php/2010/05/25/what-i-learned-from-writing-my-first -android-application /你不能通過意圖傳遞這樣複雜的數據,所以你必須這樣做或使用數據庫或類似的東西。 – 2010-11-12 18:54:12

1

對於您可以使用String演員與Intent傳承下去。

所以,首先你需要得到你的漂浮的String表示[]數組:

public class YourArrayUtils { 

    public static String pack(float[] data) { 
     StringBuilder sb = new StringBuilder(); 
     final int length = data.length; 
     for (int i = 0; i < length; i++) { 
      sb.append(data[i]); 
      if (i < (length - 1)) { 
       sb.append(':'); 
      } 
     } 
     return sb.toString(); 
    } 

    public static float[] unpack(String str) { 
     if (TextUtils.isEmpty(str)) { 
      return new float[0]; // or null depending on your needs 
     } else { 
      String[] srtData = TextUtils.split(str, ":"); 
      final int length = srtData.length; 
      float[] result = new float[length]; 
      for (int i = 0; i < length; i++) { 
       result[i] = Float.parseFloat(srtData[i]); 
      } 
      return result; 
     } 
    } 
} 

然後把它傳遞與Intent

Intent i = new Intent(YourActivityA.this, YourActivityB.class); 
i.putExtra("floatArray", YourArrayUtils.pack(yourFloatArray)); 
startActivity(i); 

最後在YourActivityB解壓:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ... 
    Intent i = getIntent(); // get starting Intent 
    float[] yourFloatArray = YourArrayUtils.unpack(i.getStringExtra("floatArray")); 
    ... 
1

更新爲舊問題,但它m幫助某人。

通過它使用Intent。在Class:

Intent i = new Intent(getApplicationContext(), class2.class); 
i.putExtra("points",points);    
startActivity(i); 

在等級2:

Bundle extras = getIntent().getExtras(); 
float[] points = extras.getFloatArray("points"); 

參考API爲bundles看可以發送

相關問題