【问题标题】:setVisibility(View.GONE) does not work in FragmentsetVisibility(View.GONE) 在片段中不起作用
【发布时间】: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


【解决方案1】:

我想知道我第一次是怎么错过的。你把视图膨胀了两次。一次在

@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);

然后在

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_main, container, false);

这就是它不起作用的原因。 不要在onStart() 中充气,它会起作用!

【讨论】:

    猜你喜欢
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2019-11-18
    • 2015-09-10
    • 1970-01-01
    • 2016-03-31
    • 2018-09-11
    相关资源
    最近更新 更多