【问题标题】:Get the list count value in first Activity from second Activity从第二个 Activity 获取第一个 Activity 中的列表计数值
【发布时间】:2013-12-05 13:10:06
【问题描述】:

我正在尝试从第二个 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

谁能告诉我如何在第一个 Activity 中获取列表计数?

【问题讨论】:

  • 你的 msgcount 是不是公开的???
  • msgcount 不应该是公开的,更不应该是静态的。请参阅我的答案以获得解决方案。

标签: java android list android-activity count


【解决方案1】:

将您的列表设为静态并创建静态 get 方法。

【讨论】:

  • 你不应该那样做。 startActivityForResult 用于将值从一个 Activity 传递到另一个。
【解决方案2】:

公开您的 msgList 并在您的第一个 Activity 中编写此代码,就可以了。

SecondActivity.msgList.size(); 

如果您仍想将 msgList 保留为私有,您应该最终在您的 SecondActivity 中创建一个公共静态方法,并从第一个活动中调用它,例如:

SecondActivity.method();

【讨论】:

  • 永远不应该将列表公开和静态或公开静态getter。那将是糟糕的设计。 Android 提供了一种在活动之间传递值的简单解决方案,即使用 startActivityForResult 来启动活动。
  • 你能解释一下为什么你说设计不好?内存管理不好或者为什么?
  • 这不是在 Android 中应该如何工作的,如果你不小心就会导致内存泄漏和类似的不良问题的来源,这样的事情可能会发生。特别是与活动。想想例如方向变化。在这种情况下,整个 Activity 将被销毁并重新创建。但这不会影响静态变量,因此它会忽略生命周期并可能成为问题的根源。
  • 好的。我明白了。感谢您的宝贵时间
【解决方案3】:


您可以通过以下方式实现此目的
在第二个活动中获取列表计数并将其存储在应用程序对象中,并在第一个活动中从应用程序对象中获取
以下是示例代码sn-ps

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
}

【讨论】:

  • 虽然这可行,但我不推荐它,因为对于已经存在适当解决方案的问题,这是一个更复杂且可能存在问题的解决方案。 startActivityForResult 可用于以更好的方式在活动之间传递值。
【解决方案4】:

我相信,Activity之间交互的正确方式是在Intents中传递数据。

另一种可能的方法是SharedPreferences(尽管我记得在至少一个版本的 Android 上,我必须使用应用程序上下文获取实例并将其存储在静态变量中)。

第三种方式是单例类。

从 MVC 的角度来看,一个 Activity 是一个 Controller,它的生命周期受到 View 生命周期的限制(你可能会重用从框架中查看类)。您想从一个 Activity 传递到另一个 Activity 的数字必须很可能属于 Model。

因此请考虑改用 StartActivityForResult()。或者,可能定义一个比 Views、Activity 甚至进程更长的 Model 类,因为 Android 进程可能会在 onPause() 之后的任何时刻被终止并重新启动。 p>

【讨论】:

    【解决方案5】:

    要从第二个活动获取数据到第一个活动,您可以使用startActivityForResult() 方法。试试这个link它可能对你有帮助。

    【讨论】:

      【解决方案6】:

      这里有人建议您应该公开该列表,但这不是一个好主意。如果您想将值返回到上一个 Activity,您可以使用 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。

      【讨论】:

      • 当我单击消息按钮时,它将打开我想要显示列表计数的活动......并且在我有阅读消息按钮的同一页面上,它将打开列表活动。 ..现在我对你的答案的怀疑是我在哪里得到我的意图结果以及我在哪里将意图发送到第二个活动
      • 为了更好地回答您的问题,您必须提供更多信息。据我了解,您有一个带有两个按钮的活动。一个打开带有列表的 Activity,另一个打开应该显示列表计数的 Activity。那是对的吗?如果是,您在列表中显示了哪些类型的数据,您从哪里获取这些数据以及如何保存?
      • 不,它对我不起作用...再次从第二个活动中检索 null
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多