更新来自不同活动的Recyclerview适配器onResume

时间:2016-06-17 06:40:01

标签: android android-fragments android-recyclerview

所以我有一个带有recyclerview的片段,它是我第一个Activity的直接子节点。在我的recyclerview行中,我有imagebutton。因此,对于我的第二个活动,我有一个功能,它可以从我的第一个活动的recyclerview更改图像按钮的图像。有人可以帮帮我吗?

更新: 我的应用程序具有addtocard功能。因此,在第一个活动中,我的recyclerview的每一行都有单独的图像按钮。当我点击图像按钮时,图像将会改变,它将被添加到购物车中。我还有一个购物车数据库,以便在添加产品时插入产品的ID。如果我点击recyclerview行,它将调用第二个活动并显示产品。所以在第二个Activity中我也有添加卡功能。问题是当我在第二个活动中的购物车中添加产品时,我想在第一个活动中更新recyclerview以指示它已经添加。

3 个答案:

答案 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);
        }
    }
}