我正在尝试通过做一个测试项目来学习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;
}
对不起,如果我无法正确表达自己,英语不是我的母语
答案 0 :(得分:0)
您是否已使用onKeyDown()
keyCode == KeyEvent .KEYCODE_BACK
是否已被确认
如果没有,请尝试onBackPressed()
,当按下后退按钮时,Activity
会调用ROW_NUMBER()
,无论是否为虚拟。