我无法从其他意图将项目添加到我的RecyclerView中

时间:2019-07-17 08:15:20

标签: java android android-recyclerview

我有两个意图。 主要活动:包含“回收者视图”,显示一些默认项目以确保其有效。 ArrayList设置为“回收者视图”,即包含这些默认项目的列表。

第二个活动:一个按钮,它将在同一页面上收集数据并将数据放入对象中,该对象将被添加到Arraylist中,该列表设置为Main Activity的“回收者视图”。

我做了一些Toast消息,以确认第二活动中的对象已添加到ArrayList中。

//My item
public item(int id, int money, String date, String category, String 
description) {
    this.id = id;
    Money = money;
    Date = date;
    Category = category;
    Description = description;
}

然后我创建了一个类来控制我的ArrayList

//Building ArrayList
public Util(){
    Log.d(TAG, "Util: Start");
    if(IncomeItems==null){
        IncomeItems = new ArrayList<>();
        initIncomeItems();
    }        
}
private static void initIncomeItems() {
    Log.d(TAG, "initIncomeItems: initI");
    int Iid = 0
    int Money= 0;
    String Date = "";
    String Category= "";
    String Description = "";

     Iid++;
     IncomeItems.add(new item(Iid, 10000, "8-Jun-2019", "Salary", 
"Salary"));
}

//adding item to ArrayList
public boolean addIncomeItem(item Item){
    Log.d(TAG, "addIncomeItem: addI");
    return IncomeItems.add(Item);
}

//getting ArrayList
public static ArrayList<item> getIncomeItems() {
    Log.d(TAG, "getIncomeItems: getI");
    return IncomeItems;
}

我在主活动中将ArrayList设置为RecyclerView

//Recycler View in Main Activity
RVAdapter IncomeAdapter = new RVAdapter(this);
Util util = new Util();
MainIncomeRV.setAdapter(IncomeAdapter);
MainIncomeRV.setLayoutManager(new GridLayoutManager(this, 1));
IncomeAdapter.notifyDataSetChanged();
IncomeAdapter.setItems(util.getIncomeItems());

在第二个活动中,我有一个用于通过从用户获取数据来创建新项目的按钮。(我在这里跳过了一些Widget初始化代码)。最后,我将该项目添加到ArrayList中,该列表设置为Main Activity中的Recycler View。

//Button in 2nd Activity
SubmitIncomeBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Date = date_day.getSelectedItem().toString() +"-" + 
date_month.getSelectedItem().toString() + "-" + 
date_year.getSelectedItem().toString();
            id++;
            item IncomeItem = new item(id, 
 Integer.parseInt(Money.getText().toString()), Date, 
IncomeCategories.getSelectedItem().toString(), 
Description.getText().toString());
            util=new Util();
            util.addIncomeItem(IncomeItem);
            Toast.makeText(IncomePage.this, IncomeItem.toString(), 
Toast.LENGTH_SHORT).show();
            Toast.makeText(IncomePage.this, 
String.valueOf(util.getIncomeItems().size()), Toast.LENGTH_SHORT).show();
            Log.d(TAG, "onClick: addI");
        }
    });

}

没有发生错误,但是不能将第二活动中创建的项目(IncomeItem)添加到主活动中。

我希望当我返回主活动时,该项目将显示在“回收者”视图中。我使用返回按钮返回到主活动是否有问题?

2 个答案:

答案 0 :(得分:0)

以下两点对您有用:

  • 您应该使用MainActivity中使用的同一 util 对象 而不是在第二个“活动”下的“提交”按钮中创建新的,因此将 util 对象传递给 第二次活动。
  • 还将适配器对象传递给第二活动,以便您可以调用NotifyDatasetChanged() 添加项目后功能。

答案 1 :(得分:0)

这就是它应该如何工作的。首先在您的arrayList中创建一个2ndActivity

ArrayList<Item> str = new ArrayList<Item>();

在SubmitIncomeBtn中,

SubmitIncomeBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Date = date_day.getSelectedItem().toString() +"-" + date_month.getSelectedItem().toString() + "-" + date_year.getSelectedItem().toString();
            id++;
            item IncomeItem = new item(id,Integer.parseInt(Money.getText().toString()), Date, IncomeCategories.getSelectedItem().toString(),Description.getText().toString());
            str.add(IncomeItem) // add IncomeItem to arrayList
        }
    });

在2ndActivity中,您需要具有以下代码才能将arrayList传递给MainActivity。

@Override
public void onBackPressed() {
    Intent intent = new Intent();
    intent.putExtra("mylist", str);
    setResult(1, intent);
}

最后在MainActivity中,添加以下代码以从2ndActivity接收数据

onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if(resultCode == RESULT_OK) {
           ArrayList<Item> myList = (ArrayList<Item>) getIntent().getSerializableExtra("mylist");
        }
    }
}