所以我有一个带有recyclerview的片段,它是我第一个Activity的直接子节点。在我的recyclerview行中,我有imagebutton。因此,对于我的第二个活动,我有一个功能,它可以从我的第一个活动的recyclerview更改图像按钮的图像。有人可以帮帮我吗?
更新: 我的应用程序具有addtocard功能。因此,在第一个活动中,我的recyclerview的每一行都有单独的图像按钮。当我点击图像按钮时,图像将会改变,它将被添加到购物车中。我还有一个购物车数据库,以便在添加产品时插入产品的ID。如果我点击recyclerview行,它将调用第二个活动并显示产品。所以在第二个Activity中我也有添加卡功能。问题是当我在第二个活动中的购物车中添加产品时,我想在第一个活动中更新recyclerview以指示它已经添加。
答案 0 :(得分:1)
您需要某种共享状态,片段可以从中读取,第二个活动可以写入。由于我不知道您使用的是什么情况,我建议您使用SharedPreferences进行第一次POC实施。
在片段适配器的 onBindView 中,检查要使用的图像的首选项。它可以是R.whatever.id或指向图像的URI。在第二个活动中,您可以根据需要将关键设置为图像资源。
或者,实际上这可能是更好的解决方案,将引用传递给适配器的数据源中的图像。然后,无论何时需要更新映像,都要在数据源中写入值,并通知适配器有一些更改。如果您不使用内容提供程序且未观察数据源,则重新加载片段的 onResume 方法中的内容。
但是为了提供更准确的答案,我们需要有关您的用例和现有代码的更多信息。
答案 1 :(得分:0)
使用回调或界面。单击并使用该接口方法设置“更改图像”时触发它。其实我不能正确理解你的问题。你能否提供守则?所以我可以给出正确答案。据我所知,我给出了答案。
答案 2 :(得分:0)
您应该将模型对象和列表位置传递给第二个活动。
<强> FirstActivity.java 强>
private static final int REQUIEST_ITEM_DETAILS = 150;
private void showItemDetails(Item item, int position) {
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra(SecondActivity.EXTRA_ITEM, item);
intent.putExtra(SecondActivity.EXTRA_POSITION, position);
context.startActivityForResult(intent, REQUIEST_ITEM_DETAILS);
}
<强> SecondActivity.java 强>
private Item item;
private int position;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
item = getIntent.getParcelableExtra(EXTRA_ITEM);
position = getIntent.getIntExtra(EXTRA_POSITION, -1);
}
/*
* finish your activity with onBackPressed function. so android device's
* Back button and your finishing operation will be same function.
*/
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra(EXTRA_ITEM, item);
intent.putExtra(EXTRA_POSITION, position);
setResult(RESULT_OK, intent);
super.onBackPressed();
}
并在您的FirstActivity.java中捕获onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_ITEM_DETAILS) {
if (resultCode == RESULT_OK) {
int position = data.getIntExtra(SecondActivity.EXTRA_POSITION, -1);
Item item = data.getParcelableExtra(SecondActivity.EXTRA_ITEM);
/* put setItem function to your adapter class. it will just replace given item with in your list item */
adapter.setItem(position, item);
adapter.notifyItemChanged(position);
}
}
}