getArguments()返回null(传递给Fragment的Adapter的值)

时间:2017-07-11 06:15:06

标签: android android-fragments

我知道这有重复的问题。但他们的问题出在ActivityFragment之间。我的问题是将值从Adapter传递到Fragment

I Toast来自适配器的值,它显示正确的值。我使用了putStringsetArguments方法,但它返回null。

以下是我在适配器中所做的事情:

 Bundle cart_bundle = new Bundle();
        cart_bundle.putString("total", String.valueOf(total_amount));
        Cart_Fragment fragment = new Cart_Fragment();
        fragment.setArguments(cart_bundle);
        ((User_Activity)context).getSupportFragmentManager().beginTransaction()
                .commit();

以下是我在Fragment中接收参数的方法:

Bundle cart_bundle = this.getArguments();
tv_total_amount.setText("Total Amount: "+ cart_bundle.getString("total"));

((User_Activity)context).getSupportFragmentManager().beginTransaction() .commit();

可能有问题

如果我尝试将User_Activity替换为Fragment,则会出错。

P.S。 我不需要使用replace()方法,因为适配器是片段中列表视图的适配器。

3 个答案:

答案 0 :(得分:1)

传递适配器的最佳和最好的方法是首先从创建适配器的位置传递类的对象。假设: -

Adapter adapter = new Adapter(activityname或fragmentname.class);

点击项目在适配器类中; -

adapter.updateData(xyz,abz)

将在Fragment中创建方法。

在片段中,你必须创建将更新数据的接口,或者你可以直接调用片段,在这里你得到如何传递数据 How to pass values between Fragments

或者你可以

Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putInt("total", String.valueOf(total_amount));
fragment.setArguments(bundle);

答案 1 :(得分:0)

你获得论证的方式是错误的。 Fragment有setArgument方法,你需要在你的代码中覆盖它,你可以加载你的片段,你可以调用片段实例和setargument。

所以你的片段类看起来像

public class Cart_Fragment extends Fragment{
    public void setArguments(Bundle args) {
         super.setArguments(args);
         //Get the argument here.
    }
}

将适配器代码修改为

Cart_Fragment fragment = new Cart_Fragment();
((User_Activity)context).getSupportFragmentManager().beginTransaction().commit();

Bundle cart_bundle = new Bundle();
cart_bundle.putString("total", String.valueOf(total_amount));
fragment.setArguments(cart_bundle);

答案 2 :(得分:0)

您正在创建Cart_Fragment的新实例,为其设置新参数但从不使用它。正在使用的实例(实际交易到replaceadd的实例)和Fragment的这个新实例不一样。因此,您不会神奇地获得现有Fragment中的参数。

您可以做的是保留您首次处理的片段的引用,并使用您自己的自定义方法将值传递给它:

public class Cart_Fragment extends Fragment {
    public void setNewTotal(String total) {
         tv_total_amount.setText("Total Amount: " + total);
    }
}

在适配器中:

fragment.setNewTotal(String.valueOf(total_amount));

如果您在XML中使用了Fragment权限,请执行以下操作:

<fragment
    android:id="@+id/cart_fragment"
    android:name="com.example.Cart_Fragment"
    ...

您可以使用以下命令获取片段的实例:

Cart_Fragment fragment = ((Cart_Fragment) getSupportFragmentManager().findFragmentById(R.id.cart_fragment));