【发布时间】:2015-09-20 06:40:16
【问题描述】:
我有一个解析 JSON 并更新视图的 FragmentActivity。 OnCreate 当我的视图仍在加载过程中时,我初始化了一个 ProgressBar。然后加载完成后,我设置了
progressBar.setVisibility(View.GONE);
但它不会生效。我确实通过对 progressBar 变量执行 toString() 来确保其完全相同的实例,并且它完全相同。我还确保它实际上达到了目的。另外我这里没有任何 onClicks,它只需要在加载内容时消失。
我看了this tutorial,它适用于那里的人。
将可见性设置为 GONE 的方法
public void updateUI(){
if(movies != null) {
for (int i = 0; i < array1.length; i++) {
//Log.v("PATH in array1 " , movies.get(i).getPath());
array1[i] = (movies.get(i).getPath());
}
gridView.setAdapter(imageAdapter);
}else{
Log.v("MOVIE ARRAY", "- I HAVE NO DATA");
}
Log.v("HIDE", "BEFORE");
Log.v("PROGRESS_BAR", progressBar.toString());
progressBar.setVisibility(View.GONE);
Log.v("HIDE", "AFTER");
}
我的创建变量的 onCreate 方法
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.fragment_main, null);
this.progressBar = (ProgressBar)v.findViewById(R.id.progress_bar);
Log.v("PROGRESS_BAR", progressBar.toString());
if (savedInstanceState != null){
Log.v("onCreate ", "EXISTING STATE");
this.movies = savedInstanceState.getParcelableArrayList("movies");
}else{
Log.v("onCreate ", "EMPTY STATE");
}
setHasOptionsMenu(true);
}
开始
@Override
public void onStart() {
super.onStart();
Log.v("onStart ", "START");
//Log.v("Movies Size ", String.valueOf(movies.size()));
update();
}
更新()
private void update(){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
String sortType = prefs.getString(getString(R.string.pref_sort_key), getString(R.string.pref_sort_default));
if (sortType.equals(sortTypeSaved)){
Log.v("Equals", "YAY");
Log.v(sortType.toString(), sortTypeSaved.toString());
if (movies == null || movies.isEmpty()){
Log.v("movies ARRAY", "EMPTY");
DownloadJsonDataTask asyncDownload = new DownloadJsonDataTask();
asyncDownload.execute(sortType);
}else{
Log.v("Equals", "NOPE");
Log.v("movies ARRAY", " not EMPTY");
updateUI();
}
}else{
Log.v(sortType.toString(), sortTypeSaved.toString());
// if (movies == null || movies.isEmpty()){
DownloadJsonDataTask asyncDownload = new DownloadJsonDataTask();
asyncDownload.execute(sortType);
// }else{
// }
}
如果 asynctask 已运行,那么我会从 onPostExacute 调用它
@Override
protected void onPostExecute(List<Movie> movies) {
updateUI();
}
请让我知道我做错了什么,我整天都在做这个,找不到解决方案。 谢谢
【问题讨论】:
-
您是从 AsyncTask 调用 UI 更新吗?这大概就是问题所在。让我知道引用活动和调用接口是否有效,我将创建一个答案。下面的链接有一个例子。 stackoverflow.com/questions/12252654/…
标签: java android mobile layout