我的应用程序中有一个代表静态值的ProgressBar,该值来自服务器。
我在Fragment中的代码在onCreateView中,如下:
public class AgeFragment extends Fragment {
List<TableStatsCache> tableStatsCacheList;
String place,partial1,partial2, partial3, partial4, partial5, partial6;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView placeTextView;
TextView partial1TextView, partial2TextView, partial3TextView, partial4TextView, partial5TextView, partial6TextView;
ProgressBar bar1ProgressBar, bar2ProgressBar, bar3ProgressBar, bar4ProgressBar, bar5ProgressBar, bar6ProgressBar;
readTableStatsCache();
View rootView = inflater.inflate(R.layout.fragment_age, container, false);
placeTextView = (TextView) rootView.findViewById(R.id.placeTextView);
partial1TextView = (TextView) rootView.findViewById(R.id.partial1TextView);
partial2TextView = (TextView) rootView.findViewById(R.id.partial2TextView);
partial3TextView = (TextView) rootView.findViewById(R.id.partial3TextView);
partial4TextView = (TextView) rootView.findViewById(R.id.partial4TextView);
partial5TextView = (TextView) rootView.findViewById(R.id.partial5TextView);
partial6TextView = (TextView) rootView.findViewById(R.id.partial6TextView);
bar1ProgressBar = (ProgressBar) rootView.findViewById(R.id.bar1ProgressBar);
bar2ProgressBar = (ProgressBar) rootView.findViewById(R.id.bar2ProgressBar);
bar3ProgressBar = (ProgressBar) rootView.findViewById(R.id.bar3ProgressBar);
bar4ProgressBar = (ProgressBar) rootView.findViewById(R.id.bar4ProgressBar);
bar5ProgressBar = (ProgressBar) rootView.findViewById(R.id.bar5ProgressBar);
bar6ProgressBar = (ProgressBar) rootView.findViewById(R.id.bar6ProgressBar);
placeTextView.setText(place);
partial1TextView.setText(partial1+"%");
partial2TextView.setText(partial2+"%");
partial3TextView.setText(partial3+"%");
partial4TextView.setText(partial4+"%");
partial5TextView.setText(partial5+"%");
partial6TextView.setText(partial6+"%");
bar1ProgressBar.setProgress(Math.round(Float.valueOf(partial1)));
bar2ProgressBar.setProgress(Math.round(Float.valueOf(partial2)));
bar3ProgressBar.setProgress(Math.round(Float.valueOf(partial3)));
bar4ProgressBar.setProgress(Math.round(Float.valueOf(partial4)));
bar5ProgressBar.setProgress(Math.round(Float.valueOf(partial5)));
bar6ProgressBar.setProgress(Math.round(Float.valueOf(partial6)));
return rootView;
}
public void readTableStatsCache(){
DatabaseHandlerTableStatsCache db_read = new DatabaseHandlerTableStatsCache(CallFragment.context);
tableStatsCacheList = db_read.getAllLines();
for (TableStatsCache cn : tableStatsCacheList) {
place = cn.getPlace();
partial1 = cn.getPartial1();
partial2 = cn.getPartial2();
partial3 = cn.getPartial3();
partial4 = cn.getPartial4();
partial5 = cn.getPartial5();
partial6 = cn.getPartial6();
}
}
}
此片段在创建时显示ProgressBar正确,但是当我的FragmentActivity重新加载Fragment时,ProgressBar不会更新。 只更新TextView。
为了重新加载一个片段,我在FragmentActivity中有这个:
viewPager.removeAllViews();
viewPager.setAdapter(mAdapter);
我认为问题可能是因为“setProgress”方法是同步的。
我如何将旧线程发布到新线程可以运行该方法?
答案 0 :(得分:0)
我不知道你是如何从服务器获得价值的,但我认为问题在于你的静态价值。它没有刷新,并且酒吧的进展没有改变。你如何从服务器上检索价值?
答案 1 :(得分:0)
我知道我很难回答这个问题。可能你已经解决了这个问题,但它可能对将来遇到类似问题的人有所帮助。我也面临着类似的问题。就我而言,progressbar.setProgress(someStaticValue);
无法在viewPager中的片段内工作。当viewPager显示最后一页时,我添加了新的片段。数据来自服务器,在进行一些计算后,我需要显示进度状态。我的片段包含4个progressBar和一些textViews,所有这些都应该用 someStaticValue 更新。进度条第一次成功更新,但添加一个MoreFragment后,它无法更新进度条的进度状态,尽管TextViews正在更新。我做了很多研究,但找不到合适的解决方案。然后我看到了你的帖子,你提示问题可能是由于setProgress()
的同步性质。所以我试图在一个新线程中调用setProgress()但是值应该在mainThread上更新。为此,我使用了Handler。以下是我更新进度条的方法。
new Handler().post(new Runnable() {
@Override
public void run() {
mScienceProgressBar.setProgress(scienceScore);
}
});
此处更新操作将在不同的主题上执行,但更新将反映在 mainThread。