【问题标题】:Android loading screen in fragments片段中的Android加载屏幕
【发布时间】:2016-02-01 15:23:45
【问题描述】:

我想在我的片段中创建一个空白的加载屏幕。代码已经完成了一半,但问题是布局首先加载,然后是检索到的数据。

演示:https://www.youtube.com/watch?v=eGR8mkNLFqI

我想在加载时有一个空白屏幕,然后一次显示所有内容。那么如何在onPostExecute 下膨胀布局?或者我应该怎么做加载屏幕?

谢谢。

public class FragmentSrvInfo extends Fragment {

 public View rootView;

 SampQuery query = AddServerActivity.query;

 @Nullable
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  rootView = inflater.inflate(R.layout.fragment_srv_info2, container, false);

  new getServerInfo().execute();

  return rootView;
 }

 public class getServerInfo extends AsyncTask < String, Integer, Boolean > {

  String[] serverInfo = null;

  @Override
  protected Boolean doInBackground(String...params) {

   if (query.connect()) {
    serverInfo = query.getInfo();
    return true;
   }
   return false;
  }

  @Override
  protected void onPostExecute(Boolean strings) {

   if (serverInfo != null) {
    TextView hostname = (TextView) rootView.findViewById(R.id.id_hostname);
    TextView players = (TextView) rootView.findViewById(R.id.id_players);
    TextView gamemode = (TextView) rootView.findViewById(R.id.id_mode);
    TextView lang = (TextView) rootView.findViewById(R.id.id_lang);

    hostname.setText(serverInfo[3]);
    players.setText(serverInfo[1] + "/" + serverInfo[2]);
    gamemode.setText(serverInfo[4]);
    lang.setText(serverInfo[5]);
   }
  }

 }
}

【问题讨论】:

  • 演示视频是私人的,请公开。
  • 完成!对此感到抱歉。

标签: android android-layout android-fragments android-intent


【解决方案1】:

将您的布局包装在 FrameLayout 中,并在其顶部添加一个空白的“加载屏幕”(这意味着您的框架布局中的最后一个条目),其宽度和高度为 match_parent。

<FrameLayout>
    <BLA>Layout for your data you load in Background</BLA>
    <LinearLayout android:width="match_parent"
        android:height="match_parent"
        android:id="@+id/loading"/>
</FrameLayout>

(这个Layout XML只是为了说明这个想法,你当然要写它来匹配你的布局)

然后你可以只用一个片段来处理它——你只需将加载屏幕的可见性设置为View.GONE

public class getServerInfo extends AsyncTask<String, Integer, Boolean> {

    String[] serverInfo = null;

    @Override
    protected Boolean doInBackground(String... params) {

        if (query.connect()) { 
            serverInfo = query.getInfo();
            return true;
        }
        return false;
   }

   @Override
   protected void onPostExecute(Boolean strings) {
        rootView.findViewById(R.id.loading).setVisibility(View.GONE);
        if(serverInfo != null) {
          // your code to show data
        }
    }
}

如果多次加载数据,也可以在onPreExecute();中设置Visibility为View.VISIBLE

【讨论】:

  • 谢谢,但是当我将所有文本视图放入 FrameLayout 时,所有视图都会被压缩。图片:i.imgur.com/wmdDb0x.png
  • 您将整个布局(包括(最有可能的)包含您的文本视图的线性布局)放入框架布局...
  • 我离开了 LinearLayout 并为 FrameLayout 添加了“正在加载”的 id(并且还调高了可见性:它从 INVISIBLE 变为 VISIBLE)。看起来它现在可以工作了。谢谢您的帮助! :) 我对其他解决方案持开放态度,但我可以确认这个解决方案完美无缺。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2014-04-29
相关资源
最近更新 更多