如何启动带参数的 activity?

How to lanch an activity with parameters?

我创建了一个 Activity class 并定义了一个构造函数:

   public class Spinner_Name extends Activity{

        List<String> listSp;
        public Spinner_Name(List<String> list)
        {
            listSp = new ArrayList<String>();
            listSp = list;
        }


        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.spinner_layout);

        }
}

我想通过 Activity:

调用 Activity
 public class MAIN extends Activity{

            List<String> listSp;


            @Override
            public void onCreate(Bundle savedInstanceState)
            {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.spinner_layout);
                 listSp = new ArrayList<String>();
                  listSp.add("a");

            }
    }

但是当我 运行 应用程序显示此消息时:

Unfortunately, Main has been stopped

当我从构造函数中删除参数时,应用程序 运行 成功。如何使用参数将 activity 变为 运行?

1) "You never construct an activity directly, so you can't use it to pass in parameters." 你在 onCreate() 上做事。

2) 您可以使用 Bundle 从一个 activity 向另一个发送参数,例如发送 int:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
Bundle b = new Bundle();
b.putInt("key", 1); //Your id
intent.putExtras(b); //Put your id to your next Intent
startActivity(intent);
finish();

并从新打开的 activity:

中获取该值
Bundle b = getIntent().getExtras();
int value = b.getInt("key");

3)要发送List,需要将list复制到array中,然后发送array:

List<String> a;
String[] b = new String[a.size()];
a.toArray(b);
Bundle c=new Bundle();
c.putStringArray("myList", b);     
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtras(c)
startActivity(intent);
finish();

获取数组 (check):

Bundle b=getIntent().getExtras();
String[] myNewList=b.getStringArray("myList");

您不应该为 类 扩展 Activity 编写构造函数。您应该在声明它们的地方或 onCreate() 中初始化任何字段。如果您需要将一个 ArrayList 从一个 activity 传递给另一个,您应该使用 putExtra 来存储 ArrayListIntentgetExtra再次取回它。

我认为这不是您问题的解决方案,但这两行没有意义:

listSp = new ArrayList<String>();
listSp = list;

您创建一个新的 ArrayList-Object,然后立即覆盖该引用。所以垃圾收集器会把它扔掉。