android - 为什么我的 android progressBar 从不显示?
问题描述
我有一个 recyclerView 正在加载并显示我想要的项目,但是有一个延迟(当应用程序从网络获取 xml 新闻并解析它们时),我希望显示一个 progressBar 以指示用户. 进度条在那里,但它从未出现。
这是我的代码:
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener, SearchView.OnQueryTextListener {
private ArrayList<NewsItem> newsItems;
private ProgressBar updateProgressBar;
private RecyclerView newsItemsRecyclerView;
private NewsAdapter newsAdapter;
private SearchView searchView;
private NewsAddressProvider newsAddressProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hookUpScreenViews();
//making the list ready
newsItems = new ArrayList<>();
//getting the news
newsAddressProvider = new NewsAddressProvider();
getTheNews(newsAddressProvider.getGeneral());
//setting up the search view
searchView.setOnQueryTextListener(this);
}
private void getTheNews(ArrayList<String> addresses) {
for (String address : addresses) {
StringRequest stringRequest = new StringRequest(address, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
NewsXMLParser newsXMLParser = new NewsXMLParser(response);
newsXMLParser.parseNewsXml();
newsItems.addAll(newsXMLParser.getNewsItems());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
Volley.newRequestQueue(this).add(stringRequest);
}
updateRecyclerView(newsItems);
}
private void hookUpScreenViews() {
//setting the progressBar
updateProgressBar = findViewById(R.id.updateProgressBar);
newsItemsRecyclerView = findViewById(R.id.newsItemsRecyclerView);
searchView = findViewById(R.id.main_news_search_view);
}
private void updateRecyclerView(ArrayList<NewsItem> newsList) {
if (newsList != null) {
updateProgressBar.setVisibility(View.INVISIBLE);
}
newsAdapter = new NewsAdapter(newsList, this);
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
newsItemsRecyclerView.setLayoutManager(layoutManager);
newsItemsRecyclerView.setAdapter(newsAdapter);
newsAdapter.notifyDataSetChanged();
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if (newsAdapter != null) {
newsAdapter.getFilter().filter(newText);
}
return true;
}
}
我也试过
if (newsList != null) {
updateProgressBar.setVisibility(View.GONE);
}
还有这段代码:
if (newsList != null && newsList.size()>0) {
updateProgressBar.setVisibility(View.INVISIBLE);
}
我也使用.GONE
了第二种方法,但是这次 ProgreesBar 永远不会消失,它只是停留在那里并到处旋转,当我尝试 Log.d 时,它说 newsList 是空的!,而显然有值它,recyclerView 正在显示它们。而不是.size()
我也检查过.isEmpty()
,但结果还是一样!
这是进度条的 xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".activities.MainActivity">
<android.support.v7.widget.RecyclerView
android:background="@color/transparent"
android:padding="5dp"
android:id="@+id/newsItemsRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/mobileBanner"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:divider="@color/transparent"/>
<ProgressBar
android:id="@+id/updateProgressBar"
style="?android:attr/progressBarStyle"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
android:layout_gravity="top|center_horizontal"/>
</RelativeLayout>
解决方案
您的updateRecyclerView
方法在 MainThead 中被调用,它立即被执行。把你的updateRecyclerView
方法放在onResponse
andonErrorResponse
推荐阅读
- java - 检测 JUnit 中的 RetentionPolicy.CLASS 注释
- arduino - 如何加载配置并保存新配置 LittleFS ESP32?
- asp.net-mvc - 如何从 CREATE 记录的下拉列表中将当前选择的值保存到数据库
- python - 如何在 pandas 中导入和读取多个 json 文件?
- firebase - 使用 ESP8266HTTPClient 不断收到 HTTP 400 错误
- javascript - 地图数组没有被识别,所以页面没有建立
- javascript - ruby on rails 6 - 在java脚本中动态引用图像
- css - 如何使用 Tailwind 向此设计添加“标题”
- css - CSS 动画:如何在图像向上滑动时显示图像?
- r - 加速度测量包