你如何在android中的活动之间传递一个float []数组?

时间:2010-11-12 16:36:56

标签: android arrays android-intent

class1.java创建了一个需要在class2.java中拥有的float []数组。你怎么做到这一点? 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);

      }
     }
    }

5 个答案:

答案 0 :(得分:2)

这似乎比首次出现更难,因为它不是java问题而是android问题。有关详细信息,请参阅here

答案 1 :(得分:2)

更新到一个旧问题,但它可能对某人有帮助。

使用Intent传递它。在class1:

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

在第2课:

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

请参阅bundles的API,了解可以发送的其他结构

答案 2 :(得分:1)

如果我理解你的问题,有两种(可能更多)方法:

1)将float[]传递给class2的构造函数。 (鉴于你的代码,这可能不是最好的方法。)

2)在class2中创建方法setMyFloatArray(float[] arr),在class1中创建getMyFloatArray()方法。在程序中实例化class1和class2之后,使用get方法作为参数调用set方法。

答案 3 :(得分:1)

为此,您可以使用随String传递的Intent个附加内容。

所以,首先你需要获得float []数组的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"));
    ...

答案 4 :(得分:0)

如果要大量使用,您可以在Global Singleton中传递数据。

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.