【问题标题】:Android: Passing an ArrayList between classesAndroid:在类之间传递 ArrayList
【发布时间】:2012-10-18 22:01:56
【问题描述】:

如何在类之间传递 ArrayList?我想从这个扩展 Activity 的类/方法中传递一个 ArrayList...

public class OpportunityActivity extends Activity {

public void updateOpportunities(ArrayList<Opportunity> opportunities) {     
        Intent intent = new Intent(this, OppListActivity.class);
    startActivity(intent);
   }

...转到扩展 ListActivity 的 OppListActivity 类,我使用这个机会 ArrayList 使用 arraylist 机会中的元素填充我的自定义 ListView:

public class OppListActivity extends ListActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

我想在两者之间完整地传递机会数组列表。我是不是该... - 使用捆绑包(我尝试过但无法找出正确的语法,这似乎有点矫枉过正/也许有更好的方法?) - 将机会公开/以某种方式暴露给两个班级 - 将机会作为参数传递?

感谢特定语法(不是伪代码)。

【问题讨论】:

    标签: android class arraylist


    【解决方案1】:

    你不能像这样创建一个活动:

    public void updateOpportunities(ArrayList<Opportunity> opportunities) {     
       OppListActivity a = new OppListActivity();
       }
    

    您应该始终使用 Intent。在 Intent 中,您可以在 ArrayList 中添加一个“额外”,稍后您将在 ListActivity 中阅读它。请注意,您可能需要让 Opportunity 实现 Parcelable。在 StackOverflow 和官方文档中都有很多关于这两个主题的信息。

    【讨论】:

    • 修复了活动代码。我找到了很多关于传递字符串的很棒的文档/示例代码,但没有任何东西可以证明有效地传递 ArrayLists。不过我会再看看。
    • 找到了这个冗长的例子:stackoverflow.com/questions/5819238/…
    • 如您所见,发送 ArrayLists 绝对是可能的。这很让人头疼,但它当然是可行的(而且方法也是正确的)。
    • 我发现,如果可以管理的话,最好将大部分数据检索保留在处理它的 Activity 本地。
    • 好主意,但我似乎需要拆分它 - 我有一个扩展 ListActivity 的类,我需要在其中使用它,另一个类扩展了填充数组列表的其他东西(忘记副手)。
    【解决方案2】:

    您需要使用意图来启动新活动。而且您实际上可以将可序列化对象放入您的意图的额外数据中:

        public void updateOpportunities(ArrayList<Opportunity> opportunities) {     
            Intent intent = new Intent(this, OppListActivity.class);
            intent.putExtra("opportunities", opportunities);
            startActivity(intent);
        }
    

    在您的 OppListActivity 活动中:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        Intent intent = getIntent();
        ArrayList<Opportunity> opportunities = intent.getSerializableExtra("opportunities");
    }
    

    但您可能需要确保 Opportunity 类扩展 Serializable

    【讨论】:

      【解决方案3】:

      如果您使用Intent 触发下一个活动,则使用putExtra。它看起来像这样:

      ArrayList<String> test_array = new ArrayList<String>();
      // do something with test_array
      Intent launchNextActivity = new Intent(getApplicationContext(), nextActivity.class);
      launchNextActivity.putExtra("array", test_array);
      startActivity(launchNextActivity);
      

      然后在您启动的活动中,您可以使用以下内容来获取它:

      Intent sender = getIntent();
      ArrayList<String> passedInArray = new ArrayList<String>();
      passedInArray = sender.getStringArrayExtra("array");
      

      【讨论】:

        【解决方案4】:

        通常在切换到其他活动时开始新意图时会添加额外的捆绑包。例如

        ArrayList<String> theArrayList = new ArrayList<String>();
        Intent i = new Intent(this,TheNewActivity.class);
        i.putStringArrayListExtra("list",theArrayList);
        startActivity(i);
        finish();
        

        【讨论】:

          【解决方案5】:

          hiiii..... 你可以使用 Bean,与一个 ArrayList

          例如

          ArrayList<RowItem> aryListbean=new ArrayList<rowItem>(); //your arraylist
          RowItem rowItem=new RowItem();  // that is your bean class
          

          现在你必须创建一个类 RowItem,即你的 Bean,它有 getter/setter 方法

          for(....)
          {
             rowItem.setUserId(); // set method's example
             rowItem.setPassword() // set method's exampl
          
             aryListbean.add(rowItem);
          }
          

          现在您可以使用 getmethod 在每个活动中使用您的数据

          例如

          getUserId();
          getUserPassword(); 
          

          【讨论】:

            猜你喜欢
            • 2013-09-02
            • 2012-08-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-30
            • 1970-01-01
            相关资源
            最近更新 更多