【发布时间】:2016-05-11 18:44:21
【问题描述】:
我在我的活动中这样声明我的片段:
public void setupViewPager(ViewPager viewP) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new ProjectPro1(), "proj1");
adapter.addFragment(projectPro2 = new ProjectPro2(), "proj2");
viewP.setAdapter(adapter);
}
现在,在我的活动结束时,我在一个按钮上调用 setOnClickListener,如果片段完全加载,该按钮工作正常 - 因为当单击该按钮时,该按钮告诉片段不在视图中更新其视图的一部分。但是,如果我立即单击该按钮,它将使应用程序崩溃,因为该片段尚未完全加载并给出空错误。如何在片段完全加载后启用按钮或在片段完全加载时启用 setTheOnClicklistener?
编辑:
为了让事情更清楚 - 我在两个片段上都有一个关注按钮。一个片段只显示图片,另一个片段显示该人的详细信息。如果用户单击任一片段上的关注按钮,则详细信息片段上的计数必须更新(关注者计数 + 1)。
更新:
这是你的答案 adelphus 的尝试 - 这是我的片段类:
private boolean profileDetailsCreated = false;
private boolean trackChanged = false;
private int trackValue = 0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.project_profile_details, container, false);
profileDetailsCreated = true;
if(trackChanged) {
Log.d(Constants.DEBUG, "THE TRACK CHANGED HAS OCCURED BEFORE PROFILE DETAILS CREATED");
setTrackCount(trackValue);
}
return rootView;
}
public void setTrackCount(int value) {
Log.d(Constants.DEBUG, "THE value for set track count is " + value);
if(profileDetailsCreated) {
Log.d(Constants.DEBUG, "THE PROFILE DETAIL IS CREATED CHANGE SHOULD HAPPEN");
dbProject.setTrackedCount(trackC + value);
db.projectUpdateTrack(dbProject);
trackC = dbProject.getTrackedCount();
showTrackBackgroundText();
} else {
Log.d(Constants.DEBUG, "THE PROFILE DETAIL IS NOT CREATED STORE THE DATA " + value);
trackValue = value;
trackChanged = true;
}
}
【问题讨论】:
-
你不能在fragment的
onCreateView中设置按钮的onClickListener,而不是activity? -
我在两个片段上都使用了按钮
-
在这种情况下,您可能不应该尝试更新每个片段的任何视图,直到它们被调用
onCreateView()。只需将执行更新所需的信息保存在片段实例本身中,并在调用 onCreateView 时进行更新。 -
这就是问题所在。只是为了更清楚地绘制图片,我有两个片段 - 第一个显示的片段不受按钮影响但显示它,第二个片段受到影响。现在可以在调用 onCreateView 之后或之前随时单击此按钮,所以如果我保存它,那么我可以让 onCreateView 相应地更改并获取保存的信息,但是在它已经创建之后它将如何被通知...见我在另一个答案上写的评论 - 这似乎是我能想到的唯一解决方案