【问题标题】:How to Add new data to a array list via intents如何通过意图将新数据添加到数组列表
【发布时间】:2020-05-08 14:07:03
【问题描述】:

在我的应用程序中,您可以创建一个工作项目,添加客户名称、预算等。 出于 UI 目的,员工的添加是在单独的活动中进行的

现在我的问题是我通过 INTENT 在活动之间传递数组中的数据 然后将该数据显示在列表视图中

现在我正在苦苦挣扎的是,每次我想向数组添加新数据时,数组都会返回空白,然后只显示新数据

所以基本上你将员工数据添加到一个数组中,它会转到另一个活动并通过意图传递该数组并在 ListView 中显示

但它只显示数组中的新数据

我想要实现的是数组中的旧数据不能消失,新数据必须只是添加到数组中而不是创建新数组 从而显示新旧数据

活动 1 代码

这会将数据传递给另一个活动并启动另一个活动

      AddStaff.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    MemberBudgetPassData= MemberBudget.getText().toString();
                    BudgetHoursPassData = budgetHours.getText().toString();

                    StaffList = Client + Rates + Staff + BudgetHoursPassData + MemberBudgetPassData;
                    StaffArray.add(StaffList);

                    PassData();


                    }



            });
 public  void PassData(){
        Intent GoToReport=new Intent(getApplicationContext(), createProject.class);
        MemberBudgetPassData= MemberBudget.getText().toString();
        BudgetHoursPassData = budgetHours.getText().toString();
        Toasty.info(popupActivity.this, StaffArray.toString(),Toasty.LENGTH_LONG).show();

        GoToReport.putStringArrayListExtra("Array",StaffArray);




       startActivity(GoToReport);

            Animatoo.animateCard(popupActivity.this);

    }

活动 2

在这里它检索数据并将其显示在列表视图中

Array = new ArrayList<>();
    Array = getIntent().getStringArrayListExtra("Array");



   final ArrayAdapter arrayAdapter =new ArrayAdapter<>
                (this, android.R.layout.simple_list_item_1, Array);
        if (Array == null)
        {
            Toasty.info(createProject.this,"Select a Staff Memebr",Toasty.LENGTH_LONG).show();
        }
        else
        {
            StaffListView.setAdapter(arrayAdapter);
        }

【问题讨论】:

    标签: java android arrays arraylist android-intent


    【解决方案1】:

    我在这种情况下使用 Gson 库。首先,您应该使用模型类,然后将模型类或 Arraylist 对象作为字符串传递。例如;

    活动一

    public  void PassData(){
        Intent GoToReport=new Intent(getApplicationContext(), createProject.class);
        MemberBudgetPassData= MemberBudget.getText().toString();
        BudgetHoursPassData = budgetHours.getText().toString();
        Toasty.info(popupActivity.this, StaffArray.toString(),Toasty.LENGTH_LONG).show();
    
    
        GoToReport.putString("Array",new Gson.toJson(StaffArray));
    
        startActivity(GoToReport);
        Animatoo.animateCard(popupActivity.this);
    }
    

    活动 2

    Type listType = new TypeToken<ArrayList<StaffArray>>(){}.getType();
    Array = new ArrayList<>();
    Array = new Gson.fromJson(getIntent().getString("Array", listType));
    
    final ArrayAdapter arrayAdapter =new ArrayAdapter<>
                    (this, android.R.layout.simple_list_item_1, Array);
        if (Array == null)
        {
            Toasty.info(createProject.this,"Select a Staff Memebr",Toasty.LENGTH_LONG).show();
        }
        else
        {
            StaffListView.setAdapter(arrayAdapter);
        }
    

    最后,不记得在 gradle 文件中添加 Gson 库了。

    implementation 'com.google.code.gson:gson:2.8.6'
    

    【讨论】:

    • 谢谢老兄,效果很好,在看到你的答案之前我还想出了另一种方法我只是通过意图来回传递数据,但你的答案效果更好
    猜你喜欢
    • 2017-03-24
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    相关资源
    最近更新 更多