将数据从活动返回到另一个活动并在RecyclerView适配器中使用该数据

时间:2016-05-26 02:20:45

标签: android android-intent android-recyclerview

我正在尝试通过做一个测试项目来学习Recycler View,但是在整天失败后发现这个bug我相信我不能这样做。我在2个活动中使用了Recycler View。

  • 第一个活动以空数组数据列表开头,因此在回收站视图中不会创建卡片视图。

  • 单击+浮动操作按钮以打开第二个活动(startActivityForResult)

  • 在该活动中,我们从一个包含成分详细信息(图像,简要说明,标题)的卡片视图的数组列表开始,以及一个名为dataToBeReturned的空数组;

  • 当卡片上的图片视图被点击时,我从卡片视图中获取所有数据,该数据被放在dataToBeReturned(图片标签,简要描述字符串,标题字符串)

当我点击android虚拟后退按钮(不知道它是如何被调用)时会发生奇怪的事情,没有任何事情发生,没有卡出现,就像数据没有被更新或者以某种方式丢失,但是没有,我记录了应该通过的成分的一些细节,确认它们在那里。但!当我点击我在第二个活动ta-da中的浮动操作按钮时,卡片被创建,细节也会从我之前的那个函数中记录下来......

因此,在这两种情况下都会传递数据,但在其中一种情况下,卡片会被创建,据我所知,回收器视图会侦听该arraylist以进行更改,并且当它发生时布局会更新等等,但是我想知道为什么当我点击后退按钮时它不会发生?

编辑:此外,如果尝试使用虚拟按钮添加成分后返回,如果我再次单击添加成分并完成第二个活动与fab,则比两个卡都创建!跆拳道?

后退按钮:

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK) {
            finishActivity();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

浮动按钮:

mFloatingActionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               finishActivity();
            }
        });

finishActivity:

public void finishActivity() {
    Intent intent = new Intent();
    ArrayList<Data> dataToReturn = (ArrayList<Data>) searchIngredientAdapter.getDataToReturn();

    for(Data data1 : dataToReturn) {
        ingredientsName.add(new String(data1.getName()));
        ingredientsImage.add(new String(String.valueOf(data1.getImage())));
        ingredientsQuantity.add(new String(String.valueOf(data1.getQuantidade())));
        ingredientsUnit.add(new String(String.valueOf(data1.getUnidade())));
    }

    intent.putStringArrayListExtra(INGREDIENTS_NAME, ingredientsName);
    intent.putStringArrayListExtra(INGREDIENTS_IMAGE, ingredientsImage);
    intent.putStringArrayListExtra(INGREDIENTS_QUANTITY, ingredientsQuantity);
    intent.putStringArrayListExtra(INGREDIENTS_UNIT, ingredientsUnit);

    setResult(Activity.RESULT_OK,intent);
    finish();
}

onCreateViewHolder(firstActivity):

@Override
    public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.custom_row_2, parent, false);

        Spinner spinner = (Spinner) v.findViewById(R.id.spinner);

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(v.getContext(), R.array.units_array, android.R.layout.simple_spinner_item);
        spinner.setAdapter(adapter);

        Holder vh = new Holder(v);
        return vh;
    }

对不起,如果我无法正确表达自己,英语不是我的母语

1 个答案:

答案 0 :(得分:0)

您是否已使用onKeyDown()

检查keyCode == KeyEvent .KEYCODE_BACK是否已被确认

如果没有,请尝试onBackPressed(),当按下后退按钮时,Activity会调用ROW_NUMBER(),无论是否为虚拟。