【问题标题】:Returning data from an activity to another activity and using that data in RecyclerView adapter将数据从一个活动返回到另一个活动并在 RecyclerView 适配器中使用该数据
【发布时间】:2016-05-26 02:20:44
【问题描述】:

我正在尝试通过做一个测试项目来学习 Recycler View,但是在整天找不到这个错误之后,我相信我做不到。我在 2 个活动上使用回收站视图。

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

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

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

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

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

因此,在这两种情况下,数据都会被传递,但在其中一种情况下,卡片会被创建,据我所知,回收器视图会在该数组列表上侦听更改,并在发生这种情况时更新布局等,但是我想知道为什么单击后退按钮时没有发生?

编辑:另外,如果在尝试使用虚拟按钮添加成分后返回,如果我再次单击添加成分并完成与工厂的第二个活动,则创建两张卡!什么鬼?

返回按钮:

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

完成活动:

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

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

【问题讨论】:

标签: android android-intent android-recyclerview


【解决方案1】:

您是否检查过您的onKeyDown() 是否被您的keyCode == KeyEvent .KEYCODE_BACK 调用过?

如果没有,请尝试onBackPressed(),无论是否虚拟,当按下返回按钮时,Activity 都会调用它。

【讨论】:

  • 两者都做了,没有结果,同样的事情 :(关于 recyclerview 更新或其他东西,我必须缺少一些东西......或者可能与活动生命周期有关?
  • 然后检查您是否将数据传递给您的RecyclerView.Adapter&lt;RecyclerView.ViewHolder&gt;,并在您的适配器中检查onCreateViewHolder() 是否被正确调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
  • 2017-10-08
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
相关资源
最近更新 更多