Java Android活动冷启动动画问题
当我启动DbActivity时(当应用程序第一次启动时),RecyclerView的动画不工作(可能工作但未显示),但如果我重新打开活动,它工作正常 我试图移动用于获取数据的istruction,并在onStart()方法上创建适配器,但它不起作用 有什么问题 数据库活动代码:Java Android活动冷启动动画问题,java,android,animation,android-recyclerview,Java,Android,Animation,Android Recyclerview,当我启动DbActivity时(当应用程序第一次启动时),RecyclerView的动画不工作(可能工作但未显示),但如果我重新打开活动,它工作正常 我试图移动用于获取数据的istruction,并在onStart()方法上创建适配器,但它不起作用 有什么问题 数据库活动代码: public class DbActivity extends AppCompatActivity { private Activity contesto; private ImageButton c
public class DbActivity extends AppCompatActivity {
private Activity contesto;
private ImageButton cercaBtn;
private EditText SSIDEditText;
private EditText PositionEditText;
private DBManager manager;
private ArrayList<Rete> reti;
public static RecyclerView recyclerView;
public static DatabaseRecyclerViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_db);
this.contesto = this;
// dbManager init.
manager = DBManager.getDbInstance(getApplicationContext());
// searching button
cercaBtn = findViewById(R.id.elimina_db);
// searching EditText
SSIDEditText = findViewById(R.id.searchSSID);
PositionEditText = findViewById(R.id.searchPosition);
// adapter creation
adapter = new DatabaseRecyclerViewAdapter();
// recyclerview init.
recyclerView = (RecyclerView) findViewById(R.id.cursor_listview);
recyclerView.setLayoutAnimation(AnimationUtils.loadLayoutAnimation(this, R.anim.layout_animation));
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
// getting data
reti = manager.query();
// updating adapter data
adapter.setReti(reti);
// adding listeners
setListeners();
}
...
}
公共类DbActivity扩展了appcompativity{
私人活动竞赛;
私人图像按钮cercaBtn;
私有编辑文本ssideditext;
私有编辑文本位置编辑文本;
私有数据库管理器;
私人ArrayList reti;
公共静态RecyclerView RecyclerView;
公共静态数据库RecycleServiceAdapter适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_db);
this.o=此;
//dbManager init。
manager=DBManager.getDbInstance(getApplicationContext());
//搜索按钮
cercaBtn=findViewById(R.id.elimina_db);
//搜索编辑文本
ssideditext=findviewbyd(R.id.searchSSID);
PositionEditText=findViewById(R.id.searchPosition);
//适配器创建
适配器=新数据库RecycleServiceAdapter();
//回收视图初始化。
recyclerView=(recyclerView)findViewById(R.id.cursor\u listview);
recyclerView.setLayoutImation(AnimationUtils.LoadLayoutImation(this,R.anim.layout_animation));
recyclerView.setAdapter(适配器);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
//获取数据
reti=manager.query();
//更新适配器数据
适配器.setReti(reti);
//添加侦听器
setListeners();
}
...
}
自定义适配器:
public class DatabaseRecyclerViewAdapter extends RecyclerView.Adapter<DatabaseRecyclerViewAdapter.ViewHolder> {
ArrayList<Rete> reti;
public DatabaseRecyclerViewAdapter(ArrayList<Rete> reti) {
setReti(reti);
}
public DatabaseRecyclerViewAdapter() {
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_cursoradapter, parent, false);
DatabaseRecyclerViewAdapter.ViewHolder holder = new DatabaseRecyclerViewAdapter.ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
Rete tmp = reti.get(position);
//holder.linearLayout.setAnimation(AnimationUtils.loadAnimation(holder.view.getContext(), R.anim.item_animation_fall_down));
// updating elements text
holder.SSID.setText(tmp.getSSID());
holder.info.setText(tmp.getDettagli());
holder.level.setText(tmp.getLevel());
// decrypting password
try {
holder.password.setText(AESCrypt.decrypt(tmp.getPassword()));
} catch (Exception e) {
holder.password.setText("");
Log.d("ENCRIPTION", "FAIL: " + e);
}
// makes password field clickable
holder.password.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// printing the alert box used to edit the password
AlertBoxManager.displayUpdatePasswordAlertBox((Activity) view.getContext() , holder.password, holder.SSID.getText().toString());
}
});
// getting lat & lon
Double lat = tmp.getLat();
Double lon = tmp.getLon();
// commute coordinates into human readable string
HumanPosition converter = new HumanPosition(holder.view.getContext());
holder.position.setText(converter.coordToString(lat, lon));
}
@Override
public int getItemCount() {
return reti.size();
}
public void setReti(ArrayList<Rete> reti) {
this.reti = reti;
notifyDataSetChanged();
DbActivity.recyclerView.scheduleLayoutAnimation();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView SSID;
private TextView info;
private TextView level;
private TextView password;
private TextView position;
private LinearLayout linearLayout;
private View view;
public ViewHolder(@NonNull final View itemView) {
super(itemView);
view = itemView;
//linearLayout = (LinearLayout) itemView.findViewById(R.id.dbRecyclerViewLinearLayout);
SSID = (TextView) itemView.findViewById(R.id.cursor_SSID);
info = (TextView) itemView.findViewById(R.id.cursor_dettagli);
level = (TextView) itemView.findViewById(R.id.cursor_level);
password = (TextView) itemView.findViewById(R.id.cursor_password);
position = (TextView) itemView.findViewById(R.id.cursor_position);
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
AlertBoxManager.displayDeleteReteAlertBox((Activity) view.getContext(), SSID.getText().toString());
return false;
}
});
}
}
}
公共类DatabaseRecycleServiceAdapter扩展了RecyclerView.Adapter{
ArrayList reti;
公共数据库RecycleServiceAdapter(ArrayList reti){
setReti(reti);
}
公共数据库RecycleServiceAdapter(){
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.layout\u cursoradapter,parent,false);
DatabaseRecycleServiceAdapter.ViewHolder holder=新建DatabaseRecycleServiceAdapter.ViewHolder(视图);
报税表持有人;
}
@凌驾
public void onBindViewHolder(@NonNull final ViewHolder,int位置){
Rete tmp=reti.get(位置);
//holder.linearLayout.setAnimation(AnimationUtils.loadAnimation(holder.view.getContext(),R.anim.item_animation_fall_down));
//更新元素文本
holder.SSID.setText(tmp.getSSID());
holder.info.setText(tmp.getDettagli());
holder.level.setText(tmp.getLevel());
//解密密码
试一试{
holder.password.setText(AESCrypt.decrypt(tmp.getPassword());
}捕获(例外e){
holder.password.setText(“”);
日志d(“说明”,“失败:+e”);
}
//使密码字段可单击
holder.password.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//打印用于编辑密码的警报框
displayUpdatePasswordAlertBox((活动)视图.getContext(),holder.password,holder.SSID.getText().toString());
}
});
//获取lat&lon
Double lat=tmp.getLat();
Double lon=tmp.getLon();
//将坐标转换为人类可读的字符串
HumanPosition converter=新的HumanPosition(holder.view.getContext());
保持架位置setText(转换器坐标串(横向、纵向));
}
@凌驾
public int getItemCount(){
返回reti.size();
}
公共无效setReti(ArrayList reti){
this.reti=reti;
notifyDataSetChanged();
DbActivity.recyclerView.ScheduleLayoutImation();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图SSID;
私有文本视图信息;
私有文本视图级别;
私有文本视图密码;
私有文本视图位置;
私人线性布局线性布局;
私人视野;
公共视图持有者(@NonNull final View itemView){
超级(项目视图);
视图=项目视图;
//linearLayout=(linearLayout)itemView.findViewById(R.id.dbRecycleServiceWLinearLayout);
SSID=(TextView)itemView.findViewById(R.id.cursor\u SSID);
info=(TextView)itemView.findViewById(R.id.cursor\u dettagli);
level=(TextView)itemView.findViewById(R.id.cursor\u level);
密码=(TextView)itemView.findViewById(R.id.cursor\u密码);
位置=(TextView)itemView.findViewById(R.id.cursor\u位置);
itemView.setOnLongClickListener(新视图.OnLongClickListener(){
@凌驾
仅长按公共布尔值(视图){
displayDeleteReteAlertBox((活动)视图.getContext(),SSID.getText().toString());
返回false;
}
});
}
}
}