我在我的应用程序中使用了 RecyclerView,但是当我在我的 RecyclerView 上滚动时,我的项目将会消失!我将此代码用于很多 RecyclerView,但这次我不知道发生了什么。 有我的 Activity 代码:
public class ActivityStartup extends AppCompatActivity {
Toolbar toolbar;
DrawerLayout drawerLayout;
NavigationView navigationView;
RecyclerView menuListRecycler;
RecyclerView schedualRecycler;
private List<ReminderModel> tempSchedualArray = new ArrayList<>();
/**
* ATTENTION: This was auto-generated to implement the App Indexing API.
* See https://g.co/AppIndexing/AndroidStudio for more information.
*/
private GoogleApiClient client;
LinearLayoutManager mSchedualLayoutManager = new LinearLayoutManager(ActivityStartup.this);
private FloatingActionButton mAddReminderButton;
RecyclerView.Adapter mSchedualAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
toolbar = (Toolbar) findViewById(R.id.toolBar);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
navigationView = (NavigationView) findViewById(R.id.navigationView);
menuListRecycler = (RecyclerView) findViewById(R.id.menuList);
schedualRecycler = (RecyclerView) findViewById(R.id.acitvityStartup_recycler_scheduals);
//Setting Customized toolbar for application
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
LinearLayoutManager mEventsLayoutManager = new LinearLayoutManager(ActivityStartup.this);
menuListRecycler.setLayoutManager(mEventsLayoutManager);
RecyclerView.Adapter mEventsAdapter = new MenuAdapter(G.menuItems, ActivityStartup.this);
menuListRecycler.setAdapter(mEventsAdapter);
mAddReminderButton = (FloatingActionButton) findViewById(R.id.add_reminder);
//Setting up recyclerView of events
populateSchedualArray();
schedualRecycler.setLayoutManager(mSchedualLayoutManager);
mSchedualAdapter = new SchedualAdapter(populateSchedualArray(), ActivityStartup.this);
schedualRecycler.setAdapter(mSchedualAdapter);
// On clicking the floating action button
mAddReminderButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), ReminderAddActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onResume() {
super.onResume();
mSchedualAdapter = new SchedualAdapter(populateSchedualArray(), ActivityStartup.this);
schedualRecycler.setAdapter(mSchedualAdapter);
}
private ArrayList<ReminderModel> populateSchedualArray() {
ArrayList<ReminderModel> schedualArray = new ArrayList<>();
Database rb = new Database(ActivityStartup.this);
tempSchedualArray = rb.getAllReminders();
ArrayList<ReminderModel> monthOne = new ArrayList<>();
ArrayList<ReminderModel> monthTwo = new ArrayList<>();
ArrayList<ReminderModel> monthThree = new ArrayList<>();
ArrayList<ReminderModel> monthFour = new ArrayList<>();
ArrayList<ReminderModel> monthFive = new ArrayList<>();
ArrayList<ReminderModel> monthSix = new ArrayList<>();
ArrayList<ReminderModel> monthSeven = new ArrayList<>();
ArrayList<ReminderModel> monthEight = new ArrayList<>();
ArrayList<ReminderModel> monthNine = new ArrayList<>();
ArrayList<ReminderModel> monthTen = new ArrayList<>();
ArrayList<ReminderModel> monthEleven = new ArrayList<>();
ArrayList<ReminderModel> monthTwelve = new ArrayList<>();
for (ReminderModel rm : tempSchedualArray) {
String[] split = rm.getDate().split("/");
switch (split[1]) {
case "1":
rm.setDate(convertDateToGregorian(split[2], split[1], split[0]));
monthOne.add(rm);
break;
case "2":
rm.setDate(convertDateToGregorian(split[2], split[1], split[0]));
monthTwo.add(rm);
break;
case "3":
rm.setDate(convertDateToGregorian(split[2], split[1], split[0]));
monthThree.add(rm);
break;
case "4":
rm.setDate(convertDateToGregorian(split[2], split[1], split[0]));
monthFour.add(rm);
break;
case "5":
rm.setDate(convertDateToGregorian(split[2], split[1], split[0]));
monthFive.add(rm);
break;
case "6":
rm.setDate(convertDateToGregorian(split[2], split[1], split[0]));
monthSix.add(rm);
break;
case "7":
rm.setDate(convertDateToGregorian(split[2], split[1], split[0]));
monthSeven.add(rm);
break;
case "8":
rm.setDate(convertDateToGregorian(split[2], split[1], split[0]));
monthEight.add(rm);
break;
case "9":
rm.setDate(convertDateToGregorian(split[2], split[1], split[0]));
monthNine.add(rm);
break;
case "10":
rm.setDate(convertDateToGregorian(split[2], split[1], split[0]));
monthTen.add(rm);
break;
case "11":
rm.setDate(convertDateToGregorian(split[2], split[1], split[0]));
monthEleven.add(rm);
break;
case "12":
rm.setDate(convertDateToGregorian(split[2], split[1], split[0]));
monthTwelve.add(rm);
break;
}
}
schedualArray.add(new ReminderModel(100000001, "start_spring", "", "", "", "", "", ""));
schedualArray.addAll(monthOne);
schedualArray.addAll(monthTwo);
schedualArray.addAll(monthThree);
schedualArray.add(new ReminderModel(100000004, "start_summer", "", "", "", "", "", ""));
schedualArray.addAll(monthFour);
schedualArray.addAll(monthFive);
schedualArray.addAll(monthSix);
schedualArray.add(new ReminderModel(100000007, "start_fall", "", "", "", "", "", ""));
schedualArray.addAll(monthSeven);
schedualArray.addAll(monthEight);
schedualArray.addAll(monthNine);
schedualArray.add(new ReminderModel(1000000010, "start_winter", "", "", "", "", "", ""));
schedualArray.addAll(monthTen);
schedualArray.addAll(monthEleven);
schedualArray.addAll(monthTwelve);
return schedualArray;
}
private String convertDateToGregorian(String year, String month, String day) {
CalendarTool calendarTool = new CalendarTool();
calendarTool.setIranianDate(Integer.parseInt(year), Integer.parseInt(month), Integer.parseInt(day));
return calendarTool.getGregorianYear() + "/" + calendarTool.getGregorianMonth() + "/" + calendarTool.getGregorianDay();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
Toast.makeText(this, "دکمه خانه کلیک شد !", Toast.LENGTH_SHORT).show();
}
if (id == R.id.action_settings) {
drawerLayout.openDrawer(Gravity.RIGHT);
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* ATTENTION: This was auto-generated to implement the App Indexing API.
* See https://g.co/AppIndexing/AndroidStudio for more information.
*/
public Action getIndexApiAction() {
Thing object = new Thing.Builder()
.setName("Main Page") // TODO: Define a title for the content shown.
// TODO: Make sure this auto-generated URL is correct.
.setUrl(Uri.parse("http://[ENTER-YOUR-URL-HERE]"))
.build();
return new Action.Builder(Action.TYPE_VIEW)
.setObject(object)
.setActionStatus(Action.STATUS_TYPE_COMPLETED)
.build();
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onStop() {
super.onStop();
}
}
这是我使用的适配器类:
public class SchedualAdapter extends RecyclerView.Adapter<SchedualAdapter.ViewHolder> {
private ArrayList<ReminderModel> items;
private Context mContext;
public SchedualAdapter(ArrayList<ReminderModel> items, Context mContext) {
this.items = items;
this.mContext = mContext;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView txtDateNumber;
TextView txtDateName;
TextView txtEventTitle;
TextView txtMonthName;
ImageView imgMonth;
LinearLayout layoutTop;
public ViewHolder(View v) {
super(v);
txtDateNumber = (TextView) v.findViewById(R.id.txt_dateNumber);
txtDateName = (TextView) v.findViewById(R.id.txt_dateName);
txtEventTitle = (TextView) v.findViewById(R.id.txt_eventTitle);
txtMonthName = (TextView) v.findViewById(R.id.txt_monthName);
imgMonth = (ImageView) v.findViewById(R.id.img_monthPic);
layoutTop = (LinearLayout) v.findViewById(R.id.layoutTop);
}
}
@Override
public SchedualAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Create a new View
final View v = LayoutInflater.from(mContext).inflate(R.layout.schedual_recycler_item, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
if (items.get(position).getTitle().equals("start_spring")) {
holder.imgMonth.setVisibility(View.VISIBLE);
holder.imgMonth.setImageResource(R.drawable.spring);
holder.txtDateName.setVisibility(View.GONE);
holder.txtDateNumber.setVisibility(View.GONE);
holder.txtEventTitle.setVisibility(View.GONE);
} else if (items.get(position).getTitle().equals("start_summer")) {
holder.imgMonth.setVisibility(View.VISIBLE);
holder.imgMonth.setImageResource(R.drawable.summer);
holder.txtDateName.setVisibility(View.GONE);
holder.txtDateNumber.setVisibility(View.GONE);
holder.txtEventTitle.setVisibility(View.GONE);
} else if (items.get(position).getTitle().equals("start_fall")) {
holder.imgMonth.setVisibility(View.VISIBLE);
holder.imgMonth.setImageResource(R.drawable.fall);
holder.txtDateName.setVisibility(View.GONE);
holder.txtDateNumber.setVisibility(View.GONE);
holder.txtEventTitle.setVisibility(View.GONE);
} else if (items.get(position).getTitle().equals("start_winter")) {
holder.imgMonth.setVisibility(View.VISIBLE);
holder.imgMonth.setImageResource(R.drawable.winter);
holder.txtDateName.setVisibility(View.GONE);
holder.txtDateNumber.setVisibility(View.GONE);
holder.txtEventTitle.setVisibility(View.GONE);
} else {
holder.imgMonth.setVisibility(View.GONE);
holder.layoutTop.setVisibility(View.VISIBLE);
holder.txtEventTitle.setText(items.get(position).getTitle());
holder.txtDateNumber.setText(items.get(position).getDate());
CalendarTool c = new CalendarTool();
if (!items.get(position).getDate().equals("")) {
String[] split = items.get(position).getDate().split("/");
c.setIranianDate(Integer.parseInt(split[2]), Integer.parseInt(split[1]), Integer.parseInt(split[0]));
holder.txtDateName.setText("" + c.getDayOfWeek());
}
}
setAnimation(holder.itemView, position);
}
private int lastPosition = -1;
private void setAnimation(View viewToAnimate, int position) {
// If the bound view wasn't previously displayed on screen, it's animated
if (position > lastPosition) {
ScaleAnimation anim = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
anim.setDuration(new Random().nextInt(501));//to make duration random number between [0,501)
viewToAnimate.startAnimation(anim);
lastPosition = position;
}
}
@Override
public int getItemCount() {
return items.size();
}
}
我不明白我的元素怎么会消失! 如果你能帮助我,我真的很感激。 谢谢。
最佳答案
我遇到了同样的问题 ( https://github.com/square/picasso/issues/845 ) 但在 github 中发现了这个并且对我有用。感谢@raj9686
rv.getRecycledViewPool().setMaxRecycledViews(0, 0);
关于android - 为什么 RecyclerView 项目随着滚动而消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44230577/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象