【问题标题】:I cannot add items to my RecyclerView from another intent我无法从另一个意图将项目添加到我的 RecyclerView
【发布时间】:2019-07-17 16:51:24
【问题描述】:

我有两个意图。 主要活动:包含回收站视图,显示一些默认项目以确保其正常工作。一个 ArrayList 设置为 Recycler View,即包含那些默认项的 List。

Second Activity:一个按钮,将收集同一页面上的数据并将数据放入一个对象中,该对象将被添加到设置为 Main Activity 的 Recycler View 的 Arraylist 中。

我制作了一些 Toast Message 以确认第二个 Activity 中的对象已添加到 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 设置为 Main Activity 中的 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());

在第二个活动中,我有一个按钮可以通过从用户那里获取数据来创建一个新项目。(我在这里跳过了一些小部件启动代码)。最后,我将项目添加到设置为 Main Activity 中的 Recycler View 的 ArrayList 中。

//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");
        }
    });

}

没有发生错误,但是在第二个Activity中创建的item(IncomeItem)无法添加到Main Activity中。

当我返回主活动时,我希望该项目将显示在回收器视图中。是我使用返回按钮返回主 Activity 的问题吗?

【问题讨论】:

  • 不应该是IncomeItem item吗?
  • @JohnJoe,“item”是类名,“IncomeItem”是我要创建的对象,因此我认为“item IncomeItem”应该是正确的。
  • 你如何从 secondActivity 到 mainActivity?通过按返回按钮或点击submitIncomeBtn
  • 我尝试按下后退按钮,然后我使用 OnBackPressed() 方法创建了另一个后退按钮,均无效。 submitIncomeBtn 现在只是用于将项目添加到 ArrayList。

标签: java android android-recyclerview


【解决方案1】:

以下两点应该对你有用:

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

【讨论】:

    【解决方案2】:

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

    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");
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-02-18
      • 2011-06-21
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      相关资源
      最近更新 更多