java - 将变量从活动传递到片段时的空对象引用
问题描述
将变量从活动传递到片段时,我得到一个空对象引用,但我无法找出问题所在。我试图传递的变量是currentPollName
. 任何帮助,将不胜感激。
这是 GroupActivity:
public class GroupActivity extends AppCompatActivity {
private ViewPager myViewPager;
private TabLayout myTabLayout;
private GroupTabsAccessorAdapter myTabsAccessorAdapter;
private String currentPollName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_group);
currentPollName = getIntent().getExtras().get("pollName").toString();
Toast.makeText(GroupActivity.this, currentPollName, Toast.LENGTH_SHORT).show();
Bundle bundle = new Bundle();
bundle.putString("pollName", currentPollName);
PollFragment fragInfo = new PollFragment();
fragInfo.setArguments(bundle);
Toolbar toolbar = (Toolbar) findViewById(R.id.group_page_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(currentPollName);
myViewPager = (ViewPager) findViewById(R.id.group_tabs_pager);
myTabsAccessorAdapter = new GroupTabsAccessorAdapter(getSupportFragmentManager());
myViewPager.setAdapter(myTabsAccessorAdapter);
myTabLayout = (TabLayout) findViewById(R.id.group_tabs);
myTabLayout.setupWithViewPager(myViewPager);
}
public String getGroupName() {
return currentPollName;
}
}
这是 PollFragment OnCreateView
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
pollView = inflater.inflate(R.layout.fragment_poll, container, false);
currentPollName = getArguments().getString("pollName");
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");
GroupNameRef = FirebaseDatabase.getInstance().getReference().child("Groups").child(currentPollName);
InitializeFields();
RetrieveDisplayPollOptions();
newOption.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RequestNewPollOption();
}
});
submitOption.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SavePollOption();
}
});
return pollView;
}
这是启动 GroupActivity 的 Itent
list_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String currentPollName = list_view.getItemAtPosition(position).toString();
Intent pollIntent = new Intent(getContext(), GroupActivity.class);
pollIntent.putExtra("pollName", currentPollName);
startActivity(pollIntent);
}
});
解决方案
我在代码中发现了以下内容
fragInfo
片段不传递给GroupTabsAccessorAdapter
. 所以将片段添加到适配器然后编写myViewPager.setAdapter(myTabsAccessorAdapter);
- 在 PollFragment
currentPollName = getArguments().getString("pollName");
中移动onViewCreated
如下。
public void onViewCreated(View view, @Nullable Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
currentPollName = getArguments().getString("pollName");
}`
推荐阅读
- java - 使用 DataMongoTest 注释的测试最后不会终止嵌入式 MongoDB
- flutter - 我有一个 ListView 和一个 DraggableScrollableSheet,它们可以在 Stack 小部件中重叠。是否有可能只有一个 GestureDetector 始终位于顶部?
- php - 我们可以在 AWS 上一个节点项目的文件夹中部署一个核心 PHP 项目吗
- ios - 如何快速从任何类型中获取一些数据
- amazon-s3 - 我可以通过传输服务将 Amazon Publisher Services 数据导入 BigQuery 吗?
- arm-template - AZ CLI 查询名称中带有破折号的资源
- javascript - MatToolbar:尝试组合不同的工具栏模式
- youtube - 如何将 YouTube 频道 URL 转换为频道 ID?
- node.js - 如何结束用户会话令牌并在时间超过 25 分钟的角度刷新令牌
- python - 尝试启动 sqlalchemy 数据库但出现错误