将数据从适配器发送到Android中的片段。 getArguments()返回null

时间:2016-07-05 05:13:54

标签: android

我想使用DataSelect('1', 'hey'len') 中存在的片段中的数据。我使用Adapter发送setArguments()Adapter的数据来接收数据。

但是当我调试它时,我在getArguments()获得nullpointerException

这就是我发送数据并接收数据的方式。

在适配器中,发送数据。

getArguments

片段类,以获取数据。

ReversalFragment f1 = new ReversalFragment();
Bundle bundle = new Bundle();
String transId = item.getTxId();
bundle.putString("tId", transId);
f1.setArguments(bundle);

任何人都可以帮助我解决如何处理此异常的问题,为什么Bundle arguments = getArguments(); if(arguments!=null) { String transId = arguments.getString("tId"); if (transId != null ) { txView.setText(transId); } } null ??

提前致谢。

5 个答案:

答案 0 :(得分:1)

使用可以在适配器中的setTag和Fragment中的getTag。 在构建的方法中,您可以在setTag();

中传递对象
@ExportedProperty
        public Object getTag() {
            throw new RuntimeException("Stub!");
        }

    public void setTag(Object tag) {
        throw new RuntimeException("Stub!");
    }

答案 1 :(得分:1)

你应该在Adapter类中调用片段类对象。假设您的片段类名是FragmentB然后你应该调用FragmentB类Object,因为在你的程序中,它无法找到你想要传递数据的片段

 FragmentB f1 = new FragmentB();
    Bundle bundle = new Bundle();
    String transId = item.getTxId();
    bundle.putString("tId", transId);
    f1.setArguments(bundle);

答案 2 :(得分:1)

您没有明确指定片段的名称, 而不是Fragment f1 = new Fragment();Your_Fragment_Name f1 = new Your_Fragment_Name(); 它会工作的。

答案 3 :(得分:1)

你应该尝试相反的方式。在当前的方法中,您正在为适配器类中的片段类创建一个对象,并将值分配给该对象,但是当您在Fragment类中时,它会创建一个新实例,并且值实际上为null。

所以你必须尝试这样的事情:

在您的Adapter类中放置getArgument()setArgument()方法。 我很确定你在Fragment类中为Adapter创建对象,将它设置为listview或其他任何东西,在那时设置并获取值。

例如

在Fragment类中:

BaseAdapter adapter = new Adapter(); //constructor called and values set
Bundle args = adapter.getArgument();

现在你可以拥有你需要的确切参数,而无需进行任何进一步的方法调用

适配器类:

Bundle bundle;
public Adapter(){
bundle = new Bundle();
//put required values
}

public Bundle getArgument(){
return bundle;
}

请注意,bundle变量在Adapter类中是全局的

答案 4 :(得分:0)

由于您将从片段创建适配器,因此您可以访问片段中的适配器。

您可以在适配器中创建public String getString(),在初始化适配器后,您可以在片段中将此方法称为adapter.getString()