如何启动带参数的 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
来存储 ArrayList
与 Intent
和 getExtra
再次取回它。
我认为这不是您问题的解决方案,但这两行没有意义:
listSp = new ArrayList<String>();
listSp = list;
您创建一个新的 ArrayList-Object,然后立即覆盖该引用。所以垃圾收集器会把它扔掉。
我创建了一个 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
来存储 ArrayList
与 Intent
和 getExtra
再次取回它。
我认为这不是您问题的解决方案,但这两行没有意义:
listSp = new ArrayList<String>();
listSp = list;
您创建一个新的 ArrayList-Object,然后立即覆盖该引用。所以垃圾收集器会把它扔掉。