我正在尝试从第二个Activity的列表中获取总消息值。我实现了这个。但是在String的情况下,它总是显示0或null的值。任何人都可以告诉我如何在我的第一个Activity中获得ArrayList大小。
我的代码是,
在第二项活动中:
private static List<String> msgList = new ArrayList<String>();//above oncreate method
setMsgList(getSMS());//call the method
int count = getMsgList().size();
msgcount = String.valueOf(count);
System.out.println("listcount" + msgcount);//it prints the correct list size
我的第一个活动是,
String size=InboxActivity.msgcount;
System.out.println("count:::::::::::::"+size);//it prints 0
有谁能告诉我如何在第一个活动中获得列表计数?
答案 0 :(得分:0)
使列表静态并创建静态get方法。
答案 1 :(得分:0)
将你的msgList公开并在你的第一个Activity中编写这段代码,这样就可以了。
SecondActivity.msgList.size();
如果您仍希望将msgList保留为私有,则最终应在SecondActivity中创建一个公共静态方法,并从第一个活动中调用它:
SecondActivity.method();
答案 2 :(得分:0)
有些人建议您将列表公之于众,但这不是一个好主意。如果您想将值返回到上一个活动,可以使用startActivityForResult
尝试这样的事情:
// Start the second Activity in the first Activity not with startActivity but with startActivityForResult
Intent secondActivityIntent = new Intent(this, SecondActivity.class);
// The number is used to identify the result later
startActivityForResult(secondActivityIntent, 0);
在你的第二个活动中:
// You can set a desired Result with setResult.
// You can attach data to the Result with an Intent.
Intent intent = new Intent();
intent.putExtra("tag", someString);
setResult(RESULT_OK, intent); // Use RESULT_CANCELED if something went wrong
再次出现在您的第一个活动中:
// Implement this method to retrieve the data from the second Activity.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check if the requestCode is corresponding to your Second Activity.
if (requestCode == 0) {
// Check if result is ok
if (resultCode == RESULT_OK) {
// Retrieve the value
String value = data.getStringExtra("tag");
}
}
}
您可以找到有关此主题的更多详细信息here。
答案 3 :(得分:0)
您可以通过以下方式实现此目的
获取第二个活动中的列表计数并将其存储在应用程序对象中,并将第一个活动存储在应用程序对象中
以下是示例代码片段
public class App extends Application
{
}
ACtivity 1:
protected void onStart()
{
mApp = (IVYApplication)getApplicationContext();
int count= mApp.getListCount(); //Get list count
super.onStart();
}
acitvity 2:
protected void onStart()
{
super.start();
mApp = (IVYApplication)getApplicationContext();
mApp.setListCount(List.getcount());
//getting the count of elements in list and assign in the application boject
}
答案 4 :(得分:0)
要从第二个活动获取数据到第一个活动,您可以使用startActivityForResult()
方法。试试这个link它可能对你有帮助。
答案 5 :(得分:0)
我相信,活动之间互动的正确方法是在Intent
s。
另一种可能的方式是SharedPreferences
(虽然我记得在Android的至少一个版本中我必须使用应用程序上下文获取实例并将其存储在静态变量中)。
第三种方式是单身类。
从 MVC 的角度来看,一个Activity是一个 Controller ,它的生命周期受到 View 的生命周期的限制(你可能会重用它从框架中查看类)。您要从一个Activity传递到另一个Activity的数字必须最有可能属于 Model 。
因此,请考虑使用StartActivityForResult()。或者,可能定义一个比视图,活动甚至进程更长的 Model 类,因为在 onPause()之后的任何时刻都可能会杀死并重新启动Android进程。