Java 微光动画在加载RecyclerView时未停止
我有一个从firebase获取数据的Recycler视图,我想做的是,当加载所有数据并且填充Recycler视图后,微光动画应该停止并消失。我在progressbar上也尝试过同样的方法,它没有任何问题。但在闪烁动画的情况下,它不会停止。我创建了两种方法,一种用于启动动画,另一种用于停止动画。请帮助我的代码,并建议我需要更改什么,以达到预期的结果。我正在onBindViewHolder中调用stopLoading函数。提前谢谢Java 微光动画在加载RecyclerView时未停止,java,android,progress-bar,Java,Android,Progress Bar,我有一个从firebase获取数据的Recycler视图,我想做的是,当加载所有数据并且填充Recycler视图后,微光动画应该停止并消失。我在progressbar上也尝试过同样的方法,它没有任何问题。但在闪烁动画的情况下,它不会停止。我创建了两种方法,一种用于启动动画,另一种用于停止动画。请帮助我的代码,并建议我需要更改什么,以达到预期的结果。我正在onBindViewHolder中调用stopLoading函数。提前谢谢 public class buynow extends AppCom
public class buynow extends AppCompatActivity {
private RecyclerView recyclerView;
private DatabaseReference ProductRef;
private FirebaseRecyclerAdapter<Products, UsersViewHolder> firebaseRecyclerAdapter;
private String searchText = "";
public void showLoading(){
ShimmerFrameLayout shimmerFrameLayout = findViewById(R.id.shimmer_view);
shimmerFrameLayout.startShimmerAnimation();
}
public void stopLoading(){
ShimmerFrameLayout shimmerFrameLayout = findViewById(R.id.shimmer_view);
shimmerFrameLayout.setVisibility(View.GONE);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_buynow);
Firebase.setAndroidContext(buynow.this);
Bundle extras = getIntent().getExtras();
if(extras != null){
searchText = extras.getString("phone_name");
}
setActionBarTitle();
showLoading();
Toast.makeText(buynow.this,"Loading",Toast.LENGTH_SHORT).show();
ProductRef = FirebaseDatabase.getInstance().getReference().child("Products");
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
firebaseUserSearch(searchText);
}
private void firebaseUserSearch(String searchText){
Query firebaseSearchQuery = ProductRef.orderByChild("pname").startAt(searchText).endAt(searchText + "\uf8ff");
FirebaseRecyclerOptions<Products> options = new FirebaseRecyclerOptions.Builder<Products>()
.setQuery(firebaseSearchQuery,Products.class).build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Products, UsersViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull Products model) {
holder.setDetails(getApplicationContext(), model.getPname(), model.getPprice(), model.getPmrp(), model.getPcondition(), model.getPimage());
stopLoading();
}
@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.buy_now_phones,parent,false);
return new UsersViewHolder(view);
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
@Override
protected void onStart() {
super.onStart();
firebaseRecyclerAdapter.startListening();
}
//View Holder Class
public static class UsersViewHolder extends RecyclerView.ViewHolder{
View mView;
private UsersViewHolder(@NonNull View itemView) {
super(itemView);
mView = itemView;
}
private void setDetails(Context context, String phoneName, String phonePrice, String phoneMrp, String phoneCondition, String phoneImage){
TextView phone_name = (TextView) mView.findViewById(R.id.product_name);
TextView phone_price = (TextView) mView.findViewById(R.id.product_price);
TextView phone_mrp = (TextView) mView.findViewById(R.id.product_mrp);
TextView phone_condition = (TextView) mView.findViewById(R.id.product_condition);
ImageView phone_image = (ImageView)mView.findViewById(R.id.product_image);
phone_name.setText(phoneName);
//fromatting phone price
double amount = Double.parseDouble(phonePrice);
DecimalFormat formatter = new DecimalFormat("#,###.00");
phone_price.setText("₹"+formatter.format(amount));
//fromatting phone mrp
double amount0 = Double.parseDouble(phoneMrp);
DecimalFormat formatter0 = new DecimalFormat("#,###.00");
phone_mrp.setText("MRP "+formatter.format(amount0));
phone_mrp.setPaintFlags(phone_mrp.getPaintFlags()| Paint.STRIKE_THRU_TEXT_FLAG);
phone_condition.setText(phoneCondition);
Picasso.with(context).load(phoneImage).into(phone_image);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.action_bar,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_search) {
Intent intent = new Intent(buynow.this,buynow_device_search.class);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
public void setActionBarTitle() {
getSupportActionBar().setTitle("Used Phones");
}
}
公共类buynow扩展了AppCompative活动{
私人回收站;
私有数据库参考ProductRef;
私人FirebaseRecyclerAdapter FirebaseRecyclerAdapter;
私有字符串searchText=“”;
公共空间显示加载(){
ShimmerFrameLayout-ShimmerFrameLayout=findViewById(R.id.shimmer\U视图);
shimmerFrameLayout.startShimmerAnimation();
}
公共空间停止加载(){
ShimmerFrameLayout-ShimmerFrameLayout=findViewById(R.id.shimmer\U视图);
shimmerFrameLayout.setVisibility(View.GONE);
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_buynow);
Firebase.setAndroidContext(buynow.this);
Bundle extras=getIntent().getExtras();
如果(附加值!=null){
searchText=extras.getString(“电话名”);
}
setActionBarTitle();
showLoading();
Toast.makeText(buynow.this,“Loading”,Toast.LENGTH_SHORT.show();
ProductRef=FirebaseDatabase.getInstance().getReference().child(“产品”);
recyclerView=(recyclerView)findViewById(R.id.recycler\u视图);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
firebaseUserSearch(searchText);
}
私有void firebaseUserSearch(字符串搜索文本){
Query firebaseSearchQuery=ProductRef.orderByChild(“pname”).startAt(searchText).endAt(searchText+“\uf8ff”);
FirebaseRecyclerOptions选项=新建FirebaseRecyclerOptions.Builder()
.setQuery(firebaseSearchQuery,Products.class).build();
firebaseRecyclerAdapter=新的firebaseRecyclerAdapter(选项){
@凌驾
受保护的无效onBindViewHolder(@NonNull UsersViewHolder holder,int position,@NonNull Products model){
holder.setDetails(getApplicationContext()、model.getPname()、model.getPprice()、model.getPmrp()、model.getPcondition()、model.getPimage());
停止加载();
}
@非空
@凌驾
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.buy\u now\u phones,parent,false);
返回新的UsersViewHolder(视图);
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
@凌驾
受保护的void onStart(){
super.onStart();
firebaseRecyclerAdapter.startListening();
}
//视图持有者类
公共静态类UsersViewHolder扩展了RecyclerView.ViewHolder{
视图视图;
私有UsersViewHolder(@NonNull-View-itemView){
超级(项目视图);
mView=项目视图;
}
私有void setDetails(上下文上下文、字符串phoneName、字符串phonePrice、字符串phoneMrp、字符串phoneCondition、字符串phoneImage){
TextView phone_name=(TextView)mView.findViewById(R.id.product_name);
TextView手机价格=(TextView)mView.findViewById(R.id.product\u价格);
TextView-phone\u-mrp=(TextView)mView.findviewbyd(R.id.product\u-mrp);
TextView电话\条件=(TextView)mView.findViewById(R.id.product\条件);
ImageView phone_image=(ImageView)mView.findViewById(R.id.product_image);
phone_name.setText(phoneName);
//从设定电话价格
double金额=double.parseDouble(电话价格);
DecimalFormat formatter=新的DecimalFormat(“#,#,##.00”);
电话价格。SETEXT(“₹"+格式(金额);
//fromatting电话mrp
double amount0=double.parseDouble(phoneMrp);
DecimalFormat Formatter 0=新的DecimalFormat(“#,#,#.00”);
phone_mrp.setText(“mrp”+formatter.format(amount0));
phone_mrp.setPaintFlags(phone_mrp.getPaintFlags()| Paint.STRIKE_THRU_TEXT_FLAG);
phone_condition.setText(phoneCondition);
毕加索.with(context).load(phoneImage).into(phone\u image);
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(右菜单.操作栏,菜单);
返回super.onCreateOptions菜单(菜单);
}
@凌驾
公共布尔值OnOptionItemSelected(@NonNull MenuItem item){
int id=item.getItemId();
if(id==R.id.action\u search){
意向意向=新意向(buynow.this,buynow\u device\u search.class);
星触觉(意向);
}
返回super.onOptionsItemSelected(项目);
}
public void setActionBarTitle(){
getSupportActionBar().setTitle(“二手电话”);
}
}
XML文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".buynow">
<com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/shimmer_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
layout="@layout/place_holder_layout"/>
<include
layout="@layout/place_holder_layout"/>
<include
layout="@layout/place_holder_layout"/>
<include
layout="@layout/place_holder_layout"/>
<include
layout="@layout/place_holder_layout"/>
<include
layout="@layout/place_holder_layout"/>
</LinearLayout>
</com.facebook.shimmer.ShimmerFrameLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
首先全局声明
private ShimmerFrameLayout shimmerLayout;
然后声明onCreate()节
对于展示案例
shimmerLayout.setVisibility(View.VISIBLE);
shimmerLayout.startShimmer();
对于停止情况
if(shimmerLayout.isShimmerVisible())
{
shimmerLayout.stopShimmer();
shimmerLayout.setVisibility(View.GONE);
}
代码编辑
试一试
public class buynow extends AppCompatActivity {
private RecyclerView recyclerView;
private DatabaseReference ProductRef;
private FirebaseRecyclerAdapter<Products, UsersViewHolder> firebaseRecyclerAdapter;
private String searchText = "";
ShimmerFrameLayout shimmerFrameLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_buynow);
Firebase.setAndroidContext(buynow.this);
Bundle extras = getIntent().getExtras();
if(extras != null){
searchText = extras.getString("phone_name");
}
setActionBarTitle();
ProductRef = FirebaseDatabase.getInstance().getReference().child("Products");
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
shimmerFrameLayout = findViewById(R.id.shimmer_view);
shimmerFrameLayout.setVisibility(View.VISIBLE);
shimmerFrameLayout.startShimmer();
recyclerView.setVisibility(View.INVISIBLE);
Toast.makeText(buynow.this,"Loading",Toast.LENGTH_SHORT).show();
firebaseUserSearch(searchText);
}
private void firebaseUserSearch(String searchText){
Query firebaseSearchQuery = ProductRef.orderByChild("pname").startAt(searchText).endAt(searchText + "\uf8ff");
FirebaseRecyclerOptions<Products> options = new FirebaseRecyclerOptions.Builder<Products>()
.setQuery(firebaseSearchQuery,Products.class).build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Products, UsersViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull Products model) {
holder.setDetails(getApplicationContext(), model.getPname(), model.getPprice(), model.getPmrp(), model.getPcondition(), model.getPimage());
}
@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.buy_now_phones,parent,false);
return new UsersViewHolder(view);
}
};
shimmerFrameLayout.setVisibility(View.INVISIBLE);
shimmerFrameLayout.stopShimmer();
recyclerView.setVisibility(View.VISIBLE);
recyclerView.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
@Override
protected void onStart() {
super.onStart();
firebaseRecyclerAdapter.startListening();
}
//View Holder Class
public static class UsersViewHolder extends RecyclerView.ViewHolder{
View mView;
private UsersViewHolder(@NonNull View itemView) {
super(itemView);
mView = itemView;
}
private void setDetails(Context context, String phoneName, String phonePrice, String phoneMrp, String phoneCondition, String phoneImage){
TextView phone_name = (TextView) mView.findViewById(R.id.product_name);
TextView phone_price = (TextView) mView.findViewById(R.id.product_price);
TextView phone_mrp = (TextView) mView.findViewById(R.id.product_mrp);
TextView phone_condition = (TextView) mView.findViewById(R.id.product_condition);
ImageView phone_image = (ImageView)mView.findViewById(R.id.product_image);
phone_name.setText(phoneName);
//fromatting phone price
double amount = Double.parseDouble(phonePrice);
DecimalFormat formatter = new DecimalFormat("#,###.00");
phone_price.setText("₹"+formatter.format(amount));
//fromatting phone mrp
double amount0 = Double.parseDouble(phoneMrp);
DecimalFormat formatter0 = new DecimalFormat("#,###.00");
phone_mrp.setText("MRP "+formatter.format(amount0));
phone_mrp.setPaintFlags(phone_mrp.getPaintFlags()| Paint.STRIKE_THRU_TEXT_FLAG);
phone_condition.setText(phoneCondition);
Picasso.with(context).load(phoneImage).into(phone_image);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.action_bar,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_search) {
Intent intent = new Intent(buynow.this,buynow_device_search.class);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
public void setActionBarTitle() {
getSupportActionBar().setTitle("Used Phones");
}
}
公共类buynow扩展了AppCompative活动{
私人回收站;
私有数据库参考ProductRef;
私人FirebaseRecyclerAdapter FirebaseRecyclerAdapter;
私有字符串searchText=“”;
摆振框架布局摆振框架布局;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_buynow);
Firebase.setAndroidContext(buynow.this);
Bundle extras=getIntent().getExtras();
如果(附加值!=null){
searchText=extras.getString(“电话名”);
}
setActionBarTitle();
ProductRef
public class buynow extends AppCompatActivity {
private RecyclerView recyclerView;
private DatabaseReference ProductRef;
private FirebaseRecyclerAdapter<Products, UsersViewHolder> firebaseRecyclerAdapter;
private String searchText = "";
ShimmerFrameLayout shimmerFrameLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_buynow);
Firebase.setAndroidContext(buynow.this);
Bundle extras = getIntent().getExtras();
if(extras != null){
searchText = extras.getString("phone_name");
}
setActionBarTitle();
ProductRef = FirebaseDatabase.getInstance().getReference().child("Products");
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
shimmerFrameLayout = findViewById(R.id.shimmer_view);
shimmerFrameLayout.setVisibility(View.VISIBLE);
shimmerFrameLayout.startShimmer();
recyclerView.setVisibility(View.INVISIBLE);
Toast.makeText(buynow.this,"Loading",Toast.LENGTH_SHORT).show();
firebaseUserSearch(searchText);
}
private void firebaseUserSearch(String searchText){
Query firebaseSearchQuery = ProductRef.orderByChild("pname").startAt(searchText).endAt(searchText + "\uf8ff");
FirebaseRecyclerOptions<Products> options = new FirebaseRecyclerOptions.Builder<Products>()
.setQuery(firebaseSearchQuery,Products.class).build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Products, UsersViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull Products model) {
holder.setDetails(getApplicationContext(), model.getPname(), model.getPprice(), model.getPmrp(), model.getPcondition(), model.getPimage());
}
@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.buy_now_phones,parent,false);
return new UsersViewHolder(view);
}
};
shimmerFrameLayout.setVisibility(View.INVISIBLE);
shimmerFrameLayout.stopShimmer();
recyclerView.setVisibility(View.VISIBLE);
recyclerView.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
@Override
protected void onStart() {
super.onStart();
firebaseRecyclerAdapter.startListening();
}
//View Holder Class
public static class UsersViewHolder extends RecyclerView.ViewHolder{
View mView;
private UsersViewHolder(@NonNull View itemView) {
super(itemView);
mView = itemView;
}
private void setDetails(Context context, String phoneName, String phonePrice, String phoneMrp, String phoneCondition, String phoneImage){
TextView phone_name = (TextView) mView.findViewById(R.id.product_name);
TextView phone_price = (TextView) mView.findViewById(R.id.product_price);
TextView phone_mrp = (TextView) mView.findViewById(R.id.product_mrp);
TextView phone_condition = (TextView) mView.findViewById(R.id.product_condition);
ImageView phone_image = (ImageView)mView.findViewById(R.id.product_image);
phone_name.setText(phoneName);
//fromatting phone price
double amount = Double.parseDouble(phonePrice);
DecimalFormat formatter = new DecimalFormat("#,###.00");
phone_price.setText("₹"+formatter.format(amount));
//fromatting phone mrp
double amount0 = Double.parseDouble(phoneMrp);
DecimalFormat formatter0 = new DecimalFormat("#,###.00");
phone_mrp.setText("MRP "+formatter.format(amount0));
phone_mrp.setPaintFlags(phone_mrp.getPaintFlags()| Paint.STRIKE_THRU_TEXT_FLAG);
phone_condition.setText(phoneCondition);
Picasso.with(context).load(phoneImage).into(phone_image);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.action_bar,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_search) {
Intent intent = new Intent(buynow.this,buynow_device_search.class);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
public void setActionBarTitle() {
getSupportActionBar().setTitle("Used Phones");
}
}
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
shimmerFrameLayout.setVisibility(View.GONE);
shimmerFrameLayout.stopShimmer();
recyclerView.setVisibility(View.VISIBLE);
}
}, 1000);
public class buynow extends AppCompatActivity {
private RecyclerView recyclerView;
private DatabaseReference ProductRef;
private FirebaseRecyclerAdapter<Products, UsersViewHolder> firebaseRecyclerAdapter;
private String searchText = "";
ShimmerFrameLayout shimmerFrameLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_buynow);
Firebase.setAndroidContext(buynow.this);
Bundle extras = getIntent().getExtras();
if(extras != null){
searchText = extras.getString("phone_name");
}
setActionBarTitle();
ProductRef = FirebaseDatabase.getInstance().getReference().child("Products");
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
shimmerFrameLayout = findViewById(R.id.shimmer_view);
shimmerFrameLayout.setVisibility(View.VISIBLE);
shimmerFrameLayout.startShimmer();
recyclerView.setVisibility(View.INVISIBLE);
Toast.makeText(buynow.this,"Loading",Toast.LENGTH_SHORT).show();
firebaseUserSearch(searchText);
}
private void firebaseUserSearch(String searchText){
Query firebaseSearchQuery = ProductRef.orderByChild("pname").startAt(searchText).endAt(searchText + "\uf8ff");
FirebaseRecyclerOptions<Products> options = new FirebaseRecyclerOptions.Builder<Products>()
.setQuery(firebaseSearchQuery,Products.class).build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Products, UsersViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull Products model) {
holder.setDetails(getApplicationContext(), model.getPname(), model.getPprice(), model.getPmrp(), model.getPcondition(), model.getPimage());
}
@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.buy_now_phones,parent,false);
return new UsersViewHolder(view);
}
};
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
shimmerFrameLayout.setVisibility(View.GONE);
shimmerFrameLayout.stopShimmer();
recyclerView.setVisibility(View.VISIBLE);
}
}, 1000);
recyclerView.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}