Java 在将数据通过捆绑包从活动传递到片段时获取null
在通过bundle传递数据的过程中丢失数据 尝试在空对象上调用虚拟方法“java.lang.String android.os.Bundle.getStringjava.lang.String” 字符串bundlePassData处的引用=this.getArguments.getStringtagName 这是我的代码示例。主要活动->Java 在将数据通过捆绑包从活动传递到片段时获取null,java,android,android-fragments,android-activity,Java,Android,Android Fragments,Android Activity,在通过bundle传递数据的过程中丢失数据 尝试在空对象上调用虚拟方法“java.lang.String android.os.Bundle.getStringjava.lang.String” 字符串bundlePassData处的引用=this.getArguments.getStringtagName 这是我的代码示例。主要活动-> tagsView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
tagsView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Bundle bundle = new Bundle();
TextView textView = (TextView) view.findViewById(R.id.tagName);
String selectedItemName = textView.getText().toString();
bundle.putString("tagName", selectedItemName);
TaskAssignFragment taskAssignFragment = new TaskAssignFragment();
taskAssignFragment.setArguments(bundle);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.commit();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new TaskAssignFragment()).addToBackStack(null).commit();
Log.i("ListView", selectedItemName);
}
});
我应该试试界面吗?但如果我需要数据作为变量,而不仅仅是函数,因为我会在片段中的更多位置使用它。您可以直接在片段上调用方法,例如:
TaskAssignFragment taskAssignFragment = new TaskAssignFragment();
// Call here your own method (from fragment)
taskAssignFragment.setSelectedItemName(selectedItemName);
TaskAssignFragment taskAssignFragment = new TaskAssignFragment();
taskAssignFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
taskAssignFragment).addToBackStack(null).commit();
在你的片段中:
public void setSelectedItemName(String selectedItemName) {
// Store data as field in class
this.selectedName = selectedItemName
}
其中selectedName是类中的字段。在替换代码时,您将在代码中创建新片段
TaskAssignFragment taskAssignFragment = new TaskAssignFragment();
taskAssignFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new TaskAssignFragment()).addToBackStack(null).commit();
使用已创建的片段实例,在其中设置参数
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
taskAssignFragment).addToBackStack(null).commit();
请尝试此代码,创建TaskAssignFragment的新实例并在不带参数的情况下传递它在替换fragment时创建新对象
TaskAssignFragment taskAssignFragment = new TaskAssignFragment();
taskAssignFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
taskAssignFragment).addToBackStack(null).commit();
试试这个也许你原来的getter返回了null,我在Log.iListView中测试了它,selectedItemName,它只返回我想要的字符串,这不是问题,它与this.getArguments有什么关系?这就是我要说的你从来没有用过你的created with arguments fragment TaskAssign fragment是的,我的错。。修好了,非常感谢!
TaskAssignFragment taskAssignFragment = new TaskAssignFragment();
taskAssignFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
taskAssignFragment).addToBackStack(null).commit();